2013-12-20 3 views
3

Я очень новичок в WPF. Я пытаюсь привязать свойство к строке в DataGrid, чтобы при щелчке строки свойство было установлено. Элемент ItemsSource, связанный с DataGrid, представляет собой ObservableCollection объектов типа Field.WPF: привязка к SelectedItem строки в DataGrid

Я попытался связать атрибут SelectedItem с DataGrid, но свойство не вызывается. Я использую почти идентичный код для привязки к SelectedItem ComboBox, и это работает нормально. Есть ли разница, о которой я не знаю?

<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

Я никогда не привязывался к собственности, которая была отмечена как конфиденциальная, я считаю, что она должна быть публичной собственностью, чтобы быть привязанной к пользовательскому интерфейсу. Также используется ваш ObservableCollection как ItemSource объектов типа Field? –

+0

Я думаю, вам также нужно установить привязки столбцов. – dburner

+0

, пожалуйста, проверьте окно вывода для любых ошибок привязки. И я не уверен, но вам нужно реализовать INotifyPropertyChanged для вашей собственности. – Khushi

ответ

1

Вы должны сделать его двухстороннюю привязку:

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

, распространяющиеся изменения в представлении (пользователь выбирает элемент, SelectedItem изменения) обратно в ViewModel (собственность «SelectedField»).

Кроме того, как @KevinDiTraglia отметил, что вам нужно, чтобы убедиться, что свойство ViewModel SelectedField является общественного, а не частный, иначе связывании не сможет получить доступ к геттер/сеттер.

+0

Вы можете сказать, что я пытался это сделать в 2 часа ночи, как если бы я обозначил свою собственность частной! Неудивительно, что это не сработало! Спасибо за ваш ответ. – user3124134

Смежные вопросы