DataGridComboBoxColumn устанавливает ItemSource на основе выбранного элемента другого DataGridComboBoxColumn

У меня есть 2 DataGridComboBoxColumn в моей сетке данных ClassificationComboBox и DisclosureNoteComboBox. Первый работает нормально, я вижу, что он заполнен данными. Что я хочу, так это то, что когда элемент выбран в первом, то есть ClassificationComboBox , я хочу, чтобы второй отображал список данных из выбранного элемента в первом. Выбранный элемент в ClassificationComboBox имеет тип Classification, и у него есть список ClassificationRecords, который я хочу заполнить в DisclosureNoteComboBox.

Это фрагмент моего XML.

              <materialDesign:DataGridComboBoxColumn Header="Classification" IsEditable="False" x:Name="ClassificationComboBox"
                                                       ItemsSourceBinding="{Binding ElementName=TrialBalanceViewName, Path=Report.Classifications}"
                                                       DisplayMemberPath="Name"
                                                       SelectedValuePath="Id" 
                                                       SelectedValueBinding="{Binding ClassificationRecord.ClassificationId}"
                                                       />
                <materialDesign:DataGridComboBoxColumn Header="Disclosure Note" IsEditable="False" x:Name="DisclosureNoteComboBox"
                                                       ItemsSourceBinding="{Binding ElementName=ClassificationComboBox, Path=SelectedValueBinding.ClassificationRecords}"
                                                       SelectedValuePath="DisclosureNote"
                                                       SelectedValueBinding="{Binding ClassificationRecord.DisclosureNote}"
                                                       />

Я подозреваю, что моя проблема заключается в том, как построить ItemsSourceBinding для второго (особенно путь). Я думаю, что это неправильно, но я не уверен, как вызвать выбранный элемент первого и вызвать ClassificationRecords для него, чтобы он был ItemSource второго.

ItemsSourceBinding="{Binding ElementName=ClassificationComboBox, Path=SelectedValueBinding.ClassificationRecords}"


person Lawrence O    schedule 19.01.2020    source источник


Ответы (1)


Вы не можете подойти к проблеме таким образом, потому что определения столбцов сетки данных не содержат нужных вам данных. Это инструкции для DataGrid о том, как отображать его элементы, а не контейнеры самих элементов.

Чтобы решить эту проблему, вам нужно выполнить привязку к модели данных, а не к определениям столбцов.

  • Столбец A: привязывается к свойству foo.
  • Столбец B: привязывается к свойству bar с ItemsSource, заполненным свойством foo.
person Artfunkel    schedule 20.01.2020
comment
Спасибо за ваш ответ. Это решило мою проблему. Что я сделал, так это создал свойство в каждой строке, которое предоставляет список, который используется в качестве источника элемента для второго поля со списком на основе значения первого поля со списком. - person Lawrence O; 22.01.2020