2016-06-02 5 views
1

Datagrid SelectedValueおよびSelectedValuePathに問題があります。Wpf 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> 
データグリッドのItemsSourceは、他の理由CollectionViewSourceとして定義ViewModelに(ElementsCVS.View)のプロパティにbindindedさ

、とにかくここではコードです:

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

アン要素クラスが、このインタフェースのベースの実装である:

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は現在のDataGridの選択ではなく、別のUI要素の選択にバインドされているため、他のすべてのプロパティをそのまま保持する必要があることです。

さらに、実行時にdatagridを調べると、そのselectedvalueプロパティがDataGridの選択に従って更新されますが、その変更をSelectedElementのResourceプロパティに反映させる方法が見つかりませんでした。

どこが間違っていますか?

ありがとうございます。一例として、

EDIT

のは、私は次のようSelectedElementを持っているとしましょう:

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

それから私は、データグリッドに次の項目を選択:

{ 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"; 
+0

例を追加したり、必要なものを追加したり、問題のある場所を追加できますか? – SeeuD1

+0

@ SeeuD1リクエストしたとおりに編集しました。私を助けるために何か必要がある場合はお知らせください。ありがとう – Christopher

答えて

0

私はそれを考え出し、それが、私の悪い愚かでした。 SelectedElementプロパティのOnPropertyChangedイベントが、誤ったプロパティ名で発生しました。

関連する問題