Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:绑定到DataGrid中行的SelectedItem_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# WPF:绑定到DataGrid中行的SelectedItem

C# WPF:绑定到DataGrid中行的SelectedItem,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我对WPF很陌生。我试图绑定到DataGrid中的一行属性,以便在单击该行时设置该属性。绑定到DataGrid的ItemsSource是类型为Field的对象的ObservableCollection 我已尝试绑定到DataGrid上的SelectedItem属性,但未调用该属性。我使用几乎相同的代码绑定到组合框的SelectedItem,这很好。有什么我不知道的区别吗 <ComboBox ItemsSource="{Binding RecordTypes}" SelectedItem="

我对WPF很陌生。我试图绑定到DataGrid中的一行属性,以便在单击该行时设置该属性。绑定到DataGrid的ItemsSource是类型为Field的对象的ObservableCollection

我已尝试绑定到DataGrid上的SelectedItem属性,但未调用该属性。我使用几乎相同的代码绑定到组合框的SelectedItem,这很好。有什么我不知道的区别吗

<ComboBox ItemsSource="{Binding RecordTypes}" SelectedItem="{Binding SelectedRecordType}" ...
<DataGrid ItemsSource="{Binding Fields}" SelectedItem="{Binding SelectedField}" ...
(稍后我将使用自动属性,它只是当前设置为这样,以便在设置属性时可以中断)

我不确定这是否有区别,但DataGrid由2个DataGridTextColumns和一个DataGridTemplateColumn组成,其中包含一个复选框

有人有什么想法吗?如果有任何建议,我将不胜感激


为了确认,我想要监听行的单击的原因是,每当单击行时,我都可以选中复选框。如果有更好的解决方案,请告诉我。

您需要将其设置为双向绑定:

SelectedItem="{Binding SelectedField,Mode=TwoWay}"
将视图中的更改(用户选择一项,
SelectedItem
changes)传播回viewmodel(“SelectedField”属性)


另外,正如@KevinDiTraglia指出的,您需要确保viewmodel属性
SelectedField
public,而不是private,否则绑定将无法访问getter/setter。

我从未绑定到标记为private的属性,我相信它必须是公共财产才能绑定到UI。您的ObservableCollection是否也用作类型字段的对象的ItemsSource?我认为您还需要设置列绑定。请检查您的输出窗口是否存在任何绑定错误。我不确定,但您需要为您的财产实现INotifyPropertyChanged。您可以看出我是在凌晨2点尝试此操作的,就像我将我的财产标记为私有一样!难怪它不起作用!谢谢你的回复。
SelectedItem="{Binding SelectedField,Mode=TwoWay}"