Wpf Datagrid bindind选择的值与值路径

时间:2016-06-02 09:25:21

标签: c# wpf mvvm data-binding datagrid

我遇到Datagrid SelectedValue和SelectedValuePath。

Datagrid定义如下:

   <DataGrid x:Name="dataGridResources" 
    SelectionUnit="FullRow" AutoGenerateColumns="False"
    SelectedValue="{Binding SelectedElement.Resource, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Resource">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Tags" Binding="{Binding TagLine}"></DataGridTextColumn>
        <DataGridTextColumn Header="Resource" Binding="{Binding Resource}"></DataGridTextColumn>
    </DataGrid.Columns>

由于其他原因,Datagrid ItemsSource绑定到ViewModel(ElementsCVS.View)的属性,定义为CollectionViewSource,无论如何,这里是代码:

    elements = new ObservableCollection<MElement>();
    Elements = new ReadOnlyObservableCollection<Element>(elements);
    ElementsCVS = new CollectionViewSource();
    ElementsCVS.Source = Elements;
    ElementsCVS.View.Filter += ResourcesCVS_Filter;

Element类是此接口的基本实现:

    public interface IElement
    {
         string Name { get; set; }
         CustomType Owner { get; set; }
         int Order { get; set; }
         OtherCustomType Type { get; set; }
         string Resource { get; set; }
         string TagLine { get; }
    }

集合中的实际项目可以是任何子类型。 我想要实现的行为是,当我们更改datagrid中的选择时,其资源属性值将分配给SelectedElement.Resource。重要的注意事项是SelectedElement不是当前的数据网格选择,但是它绑定到不同的UI元素选择,我们需要保留所有其他属性。

此外,在运行时检查datagrid,其selectedvalue属性会相应地更新datagrid上的选择,但我找不到在SelectedElement的Resource属性上反映该更改的方法。

有什么想法吗?我哪里错了?

提前多多感谢。

修改

举个例子:

我们说我有以下的SelectedElement:

    { Name: Selected, Owner: SomeOwner, Order: 5, Type: 3, 
    Resource: "C:/Data/Res1.txt", TagLine: "Resource, C#, WPF" }

然后我在DataGrid中选择了以下项目:

    { Name: Resxyz, Owner: null, Order: -1, Type: 3,
    Resource: "D:/Data/ResourceFile.txt", TagLine: "Resource, C++" }

此时我希望SelectedElement看起来像这样:

    { Name: Selected, Owner: SomeOwner, Order: 5, Type: 3, 
    Resource: "D:/Data/ResourceFile.txt", TagLine: "Resource, C#, WPF" }

所以唯一的行动应该是:

    SelectedElement.Resource = "D:/Data/ResourceFile.txt";

1 个答案:

答案 0 :(得分:0)

我弄清楚了,那是愚蠢的,我的坏。使用拼写错误的属性名称引发了SelectedElement属性的OnPropertyChanged事件。