2015-11-29 66 views
0

我目前正在掙扎的DataGrid WPF中MVVMDataGridComboBoxColumn和2點獨立的集合

我有什麼是數據網格,即綁定到一個集合。它按預期顯示在DataGridTextColumn中並填充DataGrid。假設我有10個項目。但我還需要的是在每行中都有一個DataGridComboBoxColumn,它將綁定到單獨的集合。它應該包含自己的價值觀,對第一個集合沒有態度。使用該DataGrid用戶將確定兩個邏輯上未連接的集合之間的綁定。

的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> 

雖然它在組合框顯示空行。我已經看到了多個示例,這些示例使用DataGridComboBoxColumn綁定到數據,並通過某個外部鍵連接到集合之間。但我有兩個不同的收藏,沒有連接。

你能看看我這個綁定有問題嗎?

+0

其中是定義的AttributesBindingList? – Ilan

+0

它在VM中設置如下: public ObservableCollection attributesBindingList; 公共的ObservableCollection AttributesBindingList { 得到 { 返回attributesBindingList; } set attributesBindingList = value; OnPropertyChangedHandler(「AttributesBindingList」); } } – Oleksii

回答

1

的DataContext你DataGridComboBoxColumn是ItemNamesSetting實例(您使用OriginalItemName和FinalItemName爲DataGridTextColumns),所以使用AttributesBindingList在DataGridComboBoxColumn你需要ElementName屬性來改變它的DataContext,例如:

<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 for Grid。我們有兩個屬性 - SomeCollection和ComboBoxCollection,但DataGridComboBoxColumn使用MainGrid中的DataContext。

+0

很好的答案,謝謝。現在很清楚。我已編輯您的帖子以糾正XAML - 將Datagrid.Columns中的ItemSource移動到DataGrid。 – Oleksii

+0

是的,謝謝你,@Oleksii – Spawn