WPF:绑定到DataGrid中的行的SelectedItem

时间:2013-12-20 21:52:13

标签: c# wpf xaml datagrid

我是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 个答案:

答案 0 :(得分:1)

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

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

将视图中的更改(用户选择项目,SelectedItem更改)传播回viewmodel(“SelectedField”属性)。

另外,正如@KevinDiTraglia指出的那样,你需要确保viewmodel属性SelectedField public ,而不是私有,否则绑定将无法访问getter /设定器。