2015-11-29 3 views
0

Я в настоящее время борется с DataGrid в WPF MVVMDataGridComboBoxColumn и 2 отдельные коллекции

Что у меня есть DataGrid, что переплетены в одной коллекции. Он отображается в DataGridTextColumn как ожидалось и заполняет DataGrid. Представим себе, что у меня есть 10 предметов. Но мне также нужно иметь один DataGridComboBoxColumn в каждой строке, который будет привязан к отдельной коллекции. Он должен содержать свои собственные ценности, которые не имеют отношения к первой коллекции. Использование этого пользователя DataGrid определит привязку между 2 коллекциями, которые не связаны логически.

код XAML является:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" 
      ItemsSource="{Binding Path=ItemNamesSetting}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Initial Name item" Binding="{Binding Path=OriginalItemName}" /> 
     <DataGridTextColumn Header="Final Name item" Binding="{Binding Path=FinalItemName}" /> 
     <DataGridComboBoxColumn Header="Belongs to" Width="*" 
           ItemsSource="{Binding Path=AttributesBindingList}" 
           DisplayMemberPath="PropName"/> 
    </DataGrid.Columns> 
</DataGrid> 

Хотя он отображает пустые строки в ComboBox. Я видел несколько примеров, которые работают с привязками DataGridComboBoxColumn к данным, связанным между коллекциями каким-то внешним ключом. Но у меня есть две разные коллекции, которые не связаны.

Можете ли вы взглянуть, где я ошибаюсь в этой привязке?

+0

Атрибут AttributesBindingList определяется? – Ilan

+0

Он установлен в VM как: public ObservableCollection attributesBindingList; public ObservableCollection AttributesBindingList { Получить { { return attributesBindingList; } { attributesBindingList = значение; OnPropertyChangedHandler ("AttributesBindingList"); } } – Oleksii

ответ

1

DataContext вашего DataGridComboBoxColumn является ItemNamesSetting экземпляра (вы используете OriginalItemName и FinalItemName для DataGridTextColumns), поэтому использовать AttributesBindingList в DataGridComboBoxColumn вам нужно изменить его DataContext, например, с ELEMENTNAME собственности:

<Grid DataContext="{Binding MainVM}" Name="MainGrid"> 
    <DataGrid ItemsSource="{Binding SomeCollection}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}"/> 
      <DataGridComboBoxColumn ItemsSource="{Binding DataContext.ComboBoxCollection, ElementName=MainGrid}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

В примере я создали VM (MainVM) как DataContext для Grid. У нас есть два свойства - SomeCollection и ComboBoxCollection, но DataGridComboBoxColumn использует DataContext из MainGrid.

+0

Отличный ответ, спасибо. Понятно теперь. Я отредактировал ваше сообщение, чтобы исправить XAML - перенесенный ItemSource из Datagrid.Columns в DataGrid. – Oleksii

+0

Да, спасибо, @Oleksii – Spawn

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