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";
例を追加したり、必要なものを追加したり、問題のある場所を追加できますか? – SeeuD1
@ SeeuD1リクエストしたとおりに編集しました。私を助けるために何か必要がある場合はお知らせください。ありがとう – Christopher