2011-05-13 27 views
3

我想在我的數據綁定組合框中重複值

爲例來獲得不同的值它的值是:藍色,藍色,黃色,紅色,橙色

我想它只顯示一次藍色。

我的主要想法是將所有組合框的值放入一個數組中,將數組設置爲不同,然後重新填充組合框。有沒有其他方法?

如果沒有,我將如何從組合框中獲取所有值?

感謝

編輯 - 等級:

public class DistinctConverter : IValueConverter 
{ 

} 

編輯 - 調試:

enter image description here

回答

8

的屬性,您可以創建一個IValueConverter你的列表轉換成不同的列表:

public class DistinctConverter : IValueConverter 
{ 
    public object Convert(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var values = value as IEnumerable; 
     if (values == null) 
      return null; 
     return values.Cast<object>().Distinct(); 
    } 

    public object ConvertBack(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

其添加到資源:

<local:DistinctConverter x:Key="distinctConverter" /> 

,並使用它像這樣:

<ComboBox ItemsSource="{Binding Vals, Converter={StaticResource distinctConverter}}" /> 
+0

你會如何創建一個轉換器使用WPF? – 2011-05-13 18:30:23

+0

@Sandeep,查看更新後的答案。 – svick 2011-05-13 18:31:39

+0

感謝您的信息,我有麻煩進入<本地:...我已經設置名稱空間:xmlns:local =「clr-namespace:ProjectName」但無法獲得 2011-05-13 19:39:19

1

比方說,你你有一個List<String> values = blue, blue, yellow, red, orange

你可以做

ComboBox.ItemsSource = values.Distinct(); 

,或者如果您打算爲MVVM方法,您可以創建一個屬性,綁定組合框的ItemsSource與像

public List<string> values 
{ 
    get 
    { 
    return value.Distinct(); 
    } 
} 
0

,如果你是C#4.0

List<object> list = new List<object>(); 
     foreach (object o in myComboBox.Items) 
      { 
      if (!list.Contains(o)) 
       { 
       list.Add(o); 
       } 
      } 
     myComboBox.Items.Clear(); 
     myComboBox.ItemsSource=list.ToArray();