WPF:将DataGrid行的SelectedItem绑定到

3

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

我尝试将属性绑定到DataGrid的SelectedItem属性上,但该属性未被调用。我使用的代码与绑定到ComboBox的SelectedItem几乎相同,而此功能正常运行。我不知道是否存在差异?

<ComboBox ItemsSource="{Binding RecordTypes}" SelectedItem="{Binding SelectedRecordType}" ...
<DataGrid ItemsSource="{Binding Fields}" SelectedItem="{Binding SelectedField}" ...

在我的ViewModel中:
private Field SelectedField 
{
    get 
    {
        return _selectedField;
    }
    set 
    {
        _selectedField = value;
    }
}

我稍后会使用自动属性,目前是这样设置的,这样我就可以在属性设置时进行中断。

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

有人有什么想法吗?我真的很感谢任何建议。

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


1
我从未绑定过标记为私有的属性,我认为它必须是公共属性才能绑定到UI。另外,你的ObservableCollection是否用作类型为Field的对象的ItemsSource? - Kevin DiTraglia
我认为您还需要设置列绑定。 - dburner
请检查您的输出窗口是否有任何绑定错误。我不确定,但您可能需要为您的属性实现INotifyPropertyChanged。 - Khushi
1个回答

1
你需要将其变成双向绑定:
SelectedItem="{Binding SelectedField,Mode=TwoWay}"

这将在视图中传播更改(用户选择项目,SelectedItem 改变),并将其传回视图模型(“SelectedField”属性)。

此外,正如 @KevinDiTraglia 指出的那样,您需要确保视图模型属性 SelectedField公共的,而不是私有的,否则绑定将无法访问 getter/setter。


你可以看出我是在凌晨2点尝试这个,因为我把我的属性标记为私有的!难怪它不起作用!无论如何,还是谢谢你的回复。 - user3124134

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接