Как получить значения строк с помощью DataGridTemplateColumn, подключенного к другому ItemSource

Я использую WPF MVVM DataGrid, и один из столбцов эквивалентен DataGridComboBoxColumn, но сделан из DataGridTemplateColumn. Сам DataGrid привязан к одному объекту, а столбец ComboBox привязан к отдельному.

Код XAML:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding ItemNamesSetting}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Item1" Binding="{Binding Path=OriginalItemName}" />
        <DataGridTextColumn Header="Item2" Binding="{Binding Path=FinalItemName}" />
        <DataGridTemplateColumn Header="Attribute">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding DataContext.AttributesBindingList, ElementName=ThirdStepTab}" DisplayMemberPath="PropName" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Item3" Binding="{Binding Path=Separatopr}" />
    </DataGrid.Columns>
</DataGrid>

Вопрос в том, как мне получить полные данные строки? Я планирую иметь одну кнопку «Сохранить», которая будет отправлять данные в базу данных, и мне нужно получать данные в текстовых столбцах + данные в ComboBox из разных источников - строка за строкой. Есть способ сделать это?

Спасибо.


person Oleksii    schedule 29.11.2015    source источник
comment
Вам не нужно брать данные из UI, они привязаны к вашим свойствам ....   -  person Spawn    schedule 29.11.2015


Ответы (1)


Вам необходимо привязать свойство SelectedItem DataGrid к вашей модели представления MVVM. Кроме того, одно из соответствующих свойств модели представления должно быть привязано к Combobox SelectedValue

<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding ItemNamesSetting}" SelectedItem="{Binding VMPropertyName}" >
      <DataGrid.Columns >
          <DataGridTextColumn Header="Item1" Binding="{Binding Path=OriginalItemName}" />
          <DataGridTextColumn Header="Item2" Binding="{Binding Path=FinalItemName}" />                                        
          <DataGridTemplateColumn Header="Attribute">
                                        <DataGridTemplateColumn.CellTemplate>
              <DataTemplate>
                  <ComboBox ItemsSource="{Binding DataContext.AttributesBindingList, ElementName=ThirdStepTab}" DisplayMemberPath="PropName" SelectedValue="{Binding PropertyOfVM}"  />
               </DataTemplate>                           </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
          <DataGridTextColumn Header="Item3" Binding="{Binding Path=Separatopr}" />
person user1672994    schedule 29.11.2015