【问题标题】:How to correctly bind SelectedItem of Datagrid to read-only List?如何正确将 Datagrid 的 SelectedItem 绑定到只读列表?
【发布时间】:2013-11-12 22:08:50
【问题描述】:

xaml 视图:

<DataGrid x:Name="dgInstances" SelectedItem="{Binding Path=Instance, Mode=OneWay}"
            ItemsSource="{Binding Instances}"> SelectionMode="Single"> ... etc.

视图模型:

public List<string> Instances
string instance;
public string Instance
{
    get
    {
        if (instance == null && instances.HasItems())
        {
            instance = instances[0];
        }
        if (instance != null)
        {
            return instance;
        }
        return null;
    }
    set
    {
        instance = value;
    }
}

视图模型类实现INotifyPropertyChanged,在获取Instances 后,我给出RaisePropertyChanged("Instance");
实例在数据网格中正确显示,但未选择第一项。
我不想添加SelectedIndex=0,因为它必须通过绑定。
并且当我在数据网格中更改选择时,未使用数据绑定Instance 的设置器。
这当然也是一个要求。
它是一个只读列表:只有选定项必须是数据绑定的,而不是任何值。

【问题讨论】:

    标签: c# wpf data-binding datagrid selecteditem


    【解决方案1】:

    虽然我并没有真正使用 WPF DataGrid,但我过去曾经做过,并且似乎记得你不能 BindDataGrid.SelectedItem 属性......总而言之,这是一个非常没用的财产。但是,我相信您 可以 BindDataGrid.CurrentItem property,这几乎可以做同样的事情。


    更新>>>

    我刚刚发现 StackOverflow 上的 WPF DataGrid SelectedItem binding stops working after item change 帖子提到了这一点。

    此外,您似乎可以在 UI 元素 Binding 中使用 DataGrid.SelectedItem 属性,例如。将其显示在TextBox 中,因此它并非完全没用……只是几乎没用。


    更新 2 >>>

    如果您真的需要访问DataGrid.SelectedItem 属性,您可以创建一个AttachedProperty 来处理DataGrid.SelectionChanged 事件。


    更新 3 >>>

    我的集合类扩展了一个自定义基类,它扩展了ObservableCollection&lt;T&gt; 类。我的自定义BaseColection&lt;T&gt; 类有一个CurrentItem 类型为T 的属性。我使用这个属性来Bind 到集合控件的SelectedItem。但是,这与将属性添加到与正在显示的集合中的项目相同类型的视图模型中具有相同的效果,但它更方便:

    <ListBox ItemsSource="{Binding AudioTracks}" 
        SelectedItem="{Binding AudioTracks.CurrentItem}" ... />
    

    然后,如果集合中的项目很小并且包含所有需要编辑的数据,我将在我的示例中将AudioTracks.CurrentItem 属性用于右侧的可编辑字段图片。但是,如果数据对象有很多像图像中的字段,那么我只需使用AudioTracks.CurrentItem.Id 属性值发送到数据库以检索编辑所需的所有值,而集合中的AudioTracks 项目只保存几个值(因为集合中可能有 27,000 多个值。

    最后,关于TreeView 的链接示例,我通常会使用自定义SelectedItems Attached PropertyBindTreeView.SelectedItems 属性...如果您在线搜索,您可能会找到某人的示例代码这个。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2012-02-12
    • 2017-05-11
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多