2014-09-03 105 views
0

我有一個DataGridComboBoxColumn在我的ViewModel綁定到ObservableCollection<String>。這種結合的作品,給人一種降的ObservableCollection下來:MVVM中的DataGridComboBoxColumn綁定?

enter image description here

這裏是我的XAML:

<DataGrid Margin="5" AutoGenerateColumns="False" ItemsSource="{Binding MembershipsCollection}"> 
    <DataGrid.Columns> 
     <DataGridComboBoxColumn Header="Region" Width="SizeToHeader"> 
     <DataGridComboBoxColumn.ElementStyle> 
      <Style> 
       <Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type vm:AccountsViewModel}}}" /> 
       </Style> 
      </DataGridComboBoxColumn.ElementStyle> 
      <DataGridComboBoxColumn.EditingElementStyle> 
       <Style> 
        <Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}}" /> 
       </Style> 
      </DataGridComboBoxColumn.EditingElementStyle> 
      </DataGridComboBoxColumn> 
     <DataGridTextColumn Header="ProductCode" Binding="{Binding Path=ProductCode}" Width="SizeToHeader"/>                 
     </DataGrid.Columns> 
     </DataGrid> 

&我在我的ViewModel的ObservableCollection。這是通過從構造調用的方法填充:

private ObservableCollection<String> _RegionShortCodeCollection; 
    public ObservableCollection<String> RegionShortCodeCollection 
    { 
     get { return _RegionShortCodeCollection; } 
     set 
     { 
      _RegionShortCodeCollection = value; 
      OnPropertyChanged("RegionShortCodeCollection"); 
     } 
    } 

我現在想將電池的實際電流值的值綁定在數據庫中(同樣的ObservableCollection<T>如圖片PRODUCTCODE因爲目前這顯然是空白:

enter image description here

有什麼辦法綁定到多個屬性具有相同列。如果沒有,有沒有解決的辦法希望很明顯,由於

+0

什麼是您爲DataGrid的ItemsSource?通常情況下,您需要將組合框的SelectedItem綁定到包含此值的ItemsSource的屬性。 – 2014-09-03 15:15:51

+0

更新了問題Xaml。如果我嘗試綁定到ItemSource集合內的項目,我得到'附加信息:'在添加新聞或EditItem事務過程中不允許'DeferRefresh'異常... – Hardgraf 2014-09-03 15:28:21

+1

這是什麼? 'RelativeSource = {RelativeSource AncestorType = {x:Type vm:AccountsViewModel}}'爲什麼編輯樣式綁定到不同的AncestorType? – McGarnagle 2014-09-03 15:58:51

回答

1

不知道?。一世誤解了你的問題,但我認爲你不需要DataGridComboBoxColumn的樣式 - 只需直接使用ItemsSource值。至於你的問題,你應該能夠行視圖模型屬性綁定到使用SelectedItemBinding所選擇的項目(或SelectedValueBinding如果適用):

<DataGridComboBoxColumn Header="Region" 
    ItemsSource="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}" 
    SelectedItemBinding="{Binding SelectedRegionShortCode,Mode=TwoWay}" 
/> 
+0

我擔心這個代碼在UI中沒有返回。我本質上是試圖查看單元格中的當前值,然後單擊下拉列表中的其他選項列表,認爲這很容易,但是由於大量的WPF/Xaml,它非常快速地變得非常冗長! – Hardgraf 2014-09-03 16:17:24

+0

這是因爲DataGridColumn不是可視樹的一部分,所以它不能像這樣執行RelativeSource查找。因此需要ElementStyle&EditingElementStyle。 – 2014-09-03 16:39:45