【问题标题】:WPF: Bind to SelectedItem of row in DataGridWPF:绑定到 DataGrid 中行的 SelectedItem
【发布时间】:2025-12-15 20:50:01
【问题描述】:

我对 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 组成,其中包含一个复选框。

有人有什么想法吗?非常感谢任何建议。

为了确认,我想听一行点击的原因是我可以在点击一行时选中复选框。如果有更好的解决方案,请告诉我。

【问题讨论】:

  • 我从未绑定到标记为私有的属性,我相信它必须是公共属性才能绑定到 UI。您的 ObservableCollection 是否也用作 Field 类型对象的 ItemsSource?
  • 我认为您还需要设置列绑定。
  • 请检查您的输出窗口是否有任何绑定错误。我不确定,但您需要为您的财产实施 INotifyPropertyChanged。

标签: c# wpf xaml datagrid


【解决方案1】:

你需要让它成为双向绑定:

SelectedItem="{Binding SelectedField,Mode=TwoWay}"

这会将视图中的更改(用户选择一个项目,SelectedItem 更改)传播回视图模型(“SelectedField”属性)。

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

【讨论】:

  • 你可以看出我是在凌晨 2 点尝试这个,就好像我将我的财产标记为私有一样!难怪它没有工作!无论如何感谢您的回复。
最近更新 更多