在所选项目上有双向绑定的数据网格上下文中,如果选择了多行,如何防止 g.cs 代码更新绑定?
<dataGridControl:DataGrid
SelectedItem="{x:Bind Model.SelectedItem, Mode=TwoWay}"
在用户选择多行的场景中,当您选择多行时,它会使用最后选择的行,当然,考虑到它是双向绑定,如果不清除视图模型中的选定项属性,则无法清除视图模型中的选定项属性。整个 DataGrid 选择。考虑到选择了多行而不是最后一行,视图模型中的所选项目具有误导性。
SelectedItem
是内部设置的,很难改变其行为。
相反,您可以创建自定义
DataGrid
控件并使用 SelectedItems
覆盖 ObservableCollection
属性。
public class DataGridEx : DataGrid
{
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.Register(
nameof(SelectedItems),
typeof(IList),
typeof(DataGridEx),
new PropertyMetadata(new ObservableCollection<object>()));
public DataGridEx() : base()
{
this.SelectionChanged += (s, e) =>
{
foreach (object item in e.RemovedItems)
{
SelectedItems.Remove(item);
}
foreach (object item in e.AddedItems)
{
SelectedItems.Add(item);
}
}
}
public new IList SelectedItems
{
get => (IList)GetValue(SelectedItemsProperty);
set => SetValue(SelectedItemsProperty, value);
}
}