如果选择了一项,则仅在双向场景中设置 selectedItem 绑定

问题描述 投票:0回答:1

在所选项目上有双向绑定的数据网格上下文中,如果选择了多行,如何防止 g.cs 代码更新绑定?

  <dataGridControl:DataGrid 
         SelectedItem="{x:Bind Model.SelectedItem, Mode=TwoWay}"

在用户选择多行的场景中,当您选择多行时,它会使用最后选择的行,当然,考虑到它是双向绑定,如果不清除视图模型中的选定项属性,则无法清除视图模型中的选定项属性。整个 DataGrid 选择。考虑到选择了多行而不是最后一行,视图模型中的所选项目具有误导性。

xaml winui-3
1个回答
0
投票

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.