2009-10-13 90 views
0

在datagrid中我有兩個DataGridComboBoxColumns。其中一列的項目應取決於在另一列中選擇的內容。用於建模的底層集合是dictionary<string,List<string>>.我應該如何去實現它?我似乎無法掛鉤到列上任何相關的事件,我找不到支持這種任何數據綁定方案..wpf toolkit,datagrid,comboboxcolumn

回答

0

對於第二列,我沒有使用DataGridComboBoxColumn,而是使用了帶有嵌入式Combobox的DataGridTemplateColumn。對於itemsource我定義了一個轉換器:string -> List<string>。該轉換器轉換的另一DataGridComboBox(這勢必Navn)的selectedItem屬性的值存入List<string>,這僅僅是一個字典查找。

像這樣:

<my:DataGridTemplateColumn> 
       <my:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox SelectedItem="{Binding Værdi}" 
            ItemsSource="{Binding Navn, Converter={StaticResource dimensionToValues}}" 
            > 
         </ComboBox> 
        </DataTemplate> 
       </my:DataGridTemplateColumn.CellTemplate> 
      </my:DataGridTemplateColumn> 
0

我有同樣的情形而回,並固定它像這樣:

public class DataItem : INotifyPropertyChanged { 
    ... 

    public List<SomeObject> DisplayableComboBoxItems { 
    get; set; 
} 

private static Dictionary<int, List<SomeObject>> myDict;  

public Dictionary<int, List<SomeObject>> MyDict { 
    get { 
     if (myDict == null) { 
      myDict = GetYourDataFromSomewhere(); 
     } 
     return myDict; 
    } 
} 

public int TypeId { 
    get { return typeId; } 
    set { 
     if (value == typeId) return; 
     typeId = value; 
     RaisePropertyChanged("TypeId"); 
    } 
} 

public int TypeSetId { 
    get { return typeSetId; } 
    set { 
     if (typeSetId == value) return;   
     typeSetId = value; 
     RaisePropertyChanged("TypeSetId"); 
     DisplayableComboBoxItems = MyDict[typeSetId]; 
     RaisePropertyChanged("DisplayableComboBoxItems"); 
     TypeId = 0;     
    } 
} 
... 
} 

DataItem是綁定到DataRow的對象。 這只是代碼的一個小模型。基本上,每當TypeSet發生變化時,我需要一個新的要顯示的類型列表。我只使用了一個靜態列表,在這個例子中我使用了一個字典。
使用此設置,您可以將組合框ItemsSource綁定到「DisplayableComboBoxItems」,將SelectedValue綁定到「TypeId」。 你將需要其他屬性來顯示正確的文本,而不是TypeId。
這樣做的缺點是,當你有1000多件商品時,你將擁有所有商品的相同列表。然而這並不是我的情況(DataGrid顯示最多50項)。

我希望這是非常明顯的,它可以幫助您在正確的方向!

喝彩!
Roel

+0

感謝答案羅埃爾,非常有幫助的,但是我最終追求不同的解決方案。 – fsl 2009-10-14 11:49:14