我有一个TableView在SelectionMode.MULTIPLE.使用ListChangeListener我能够捕获多行的选择(按下Shift).
但是,只有在同一列或没有列的区域中选择项目时,我的解决方案才有效.用4个例子说明的Gif:

问题似乎是SelectedItems-list在上一个例子中显然是空的.我真的很感谢你对这个问题的帮助.
这是我的方法:
ObservableList<DataRowModel> dataRows = FXCollections.observableArrayList();
dataRows.addAll(dataSetModel.getRows());
tableDataRow.setItems(dataRows);
tableDataRowStateColumn.setCellValueFactory(f -> f.getValue().getState());
tableDataRow.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
tableDataRow.getSelectionModel().getSelectedItems()
.addListener((ListChangeListener.Change<? extends DataRowModel> c) -> {
while (c.next()) {
c.getRemoved().stream().forEach(remitem -> remitem.setSelected(false));
c.getAddedSubList().stream().forEach(additem -> additem.setSelected(true));
System.out.println(c.getList()); //Empty [] when selected using different columns
}
});
Run Code Online (Sandbox Code Playgroud)
只是为了更好地理解我的代码:setSelected(...)设置一个绑定到State-Column的BooleanPropertymy DataRowModel.
没有上下文,使用这个选定属性的原因似乎很愚蠢.但是,还有各种其他代码片段,其中ChangeListeners绑定到selected-property.
SSCCE准备好运行:
import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试深度克隆/复制包含相同类型的子项目的实体项目.Item也有参数,也应该克隆.但是,ItemType应保留为对现有ItemType的引用.
在Stackoverflow(实体框架5深度复制/克隆实体)的帮助下,我提出了以下相当糟糕的尝试:
public Item DeepCloneItem(Item item)
{
Item itemClone = db.Items //Level 1
.Include(i => i.ChildrenItems.Select(c => c.ChildrenItems )) //3 Levels
.Include(i => i.Parameters) //Level 1 Params
.Include(i => i.ChildrenItems.Select(c => c.Parameters)) //Level 2 Params
.Include(i => i.ChildrenItems.Select(c => c.ChildrenItems
.Select(cc => cc.Parameters))) //Level 3 Params
.AsNoTracking()
.FirstOrDefault(i => i.ItemID == item.ItemID);
db.Items.Add(itemClone);
db.SaveChanges();
return itemClone;
}
Run Code Online (Sandbox Code Playgroud)
对于固定的深度等级3,这种尝试就像一个魅力.但是,正如您所看到的,对于每个更深层次而言,这并不是很好.该设计允许无限数量的嵌套(但在我的上下文中,不应超过5个级别).
是否有可能根据最大深度动态添加包含到IQueryable?
这是要克隆的Item-entity:
public class Item
{
public int ItemID { get; set; }
public int? ParentItemID { get; set; …Run Code Online (Sandbox Code Playgroud)