2014-04-14 190 views
0

我有一個數據網格與一個組合框分配的客戶ID,每個客戶ID可能有許多帳戶ID分配在自己的組合框中。我想要做的就是,當用戶從組合框中選擇一個客戶ID時,賬戶ID將隨着所選的特定CustomerID而更新。WPF DataGrid Combobox selectedItem

我想我差不多有代碼。

這裏我有應用在combobox elementstyle中的customerI的itemsource。正如你所看到的,當從客戶框中選擇一個項目時,我有一個SelectedItem屬性。

   <DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" 
       Value="{Binding DataContext.EntityCollection, 
          RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType=Window}}"/> 
         <Setter Property="DisplayMemberPath" Value="Name"/> 
         <Setter Property="SelectedItem" Value="{Binding SelectedItem}"></Setter> 
         <Setter Property="HorizontalAlignment" Value="Center"></Setter> 
        </Style> 
       </DataGridComboBoxColumn.ElementStyle> 

所以帳戶ID的組合框裏面,我不知道放在哪裏SelectedItem.AID代碼...

我已經把它的物業SelectedValueBinding裏面的第一線,但它不工作。是否需要將SelectedItem放入EditingElementStyle標籤內的Itemsource屬性中?

  <DataGridComboBoxColumn SelectedValueBinding="{Binding SelectedItem.AID}"    SelectedValuePath="SID" Header="SID" Width="70"> 
       <DataGridComboBoxColumn.EditingElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" 
       Value="{Binding DataContext.EntityCollection, 
          RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType=Window}}"/> 
         <Setter Property="DisplayMemberPath" Value="AID"/> 
        </Style> 
       </DataGridComboBoxColumn.EditingElementStyle> 
       <DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" 
       Value="{Binding DataContext.EntityCollection, 
          RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType=Window}}"/> 
         <Setter Property="DisplayMemberPath" Value="AID"/> 
         <Setter Property="HorizontalAlignment" Value="Center"></Setter> 
        </Style> 
       </DataGridComboBoxColumn.ElementStyle> 

但是我可能會離開,所以任何幫助,我將不勝感激。

感謝

回答

0
<Setter Property="ItemsSource" Value="{Binding DataContext.EntityCollection, 

我不能完全肯定這是可能的,但我不建議使用這種方式。

將您的ViewModel綁定在您的ViewDataContext後面的代碼中。現在,您可以將ItemsSource綁定到ViewModel中的任何ObservableCollection屬性。那可能是你的EntityCollection

那麼,當使用DataGridComboBoxColumn時,你需要做的就是通過綁定目標屬性來告訴這個列在哪裏找到數據。

如果你必須應用到你DataGridCustomer列表,你的屬性名爲ID,您的標記可能如下:

SelectedValueBinding="{Binding ID, Mode=TwoWay}" 

檢查Mode非常需要爲了傳輸所做的更改你的財產。

現在,要對您的其他ComboBox應用任何更改,例如,添加或創建項目,則需要使用另一個ObservableCollection並將其綁定到第二個Combobox。如果你這樣做,你可以控制第二個ComboBox的項目,當對第一個進行任何更改時。

僅有很短的樣本如何看起來:

private uint _ID; 
public uint ID 
{ 
    get { return _ID; } 
    set 
    { 
     if (_ID == value) return; 
     _ID = value; 
     NotifyOfPropertyChange("ID"); 
     // Do something with your second ComboBox. 
     // You could create another ObservableCollection and bind that to your second     ComboBox and add some items representing the Account IDs 
    } 
} 

不要忘了通知你的View進行更改時。

如果這不是您正在尋找的答案,請更具體。你的實際問題很難閱讀,我只理解了第一段,並解釋瞭如何歸檔你想要做的事情。

+0

經過一段時間的睡眠,我同意你的觀點,我想要的是簡單一些,我會寫另一個問題,謝謝 – user3533398