2017-02-15 95 views
0

你好,我有一個WPF綁定的問題,並想知道我是否試圖實現的實際上是可能的。WPF - 組合框的複雜綁定

我有一個與ItemsSource綁定到X509FindType枚舉的ComboBox,使用控件中的ObjectDataProvider,如下所示。

<ObjectDataProvider x:Key="x509FindTypes" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> 
    <ObjectDataProvider.MethodParameters> 
     <x:Type TypeName="cryptography:X509FindType" /> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

的問題是,我需要做一個雙向的SelectedItem,在我的模型屬性之間的結合是字符串類型(我不能改變它是特定枚舉類型)。

目標似乎很簡單 - 每當我在模型中設置一個字符串組合框應顯示此值。另一方面,用戶也可以從ComboBox中選擇元素,並將字符串的值更新爲該枚舉類型的名稱。

感謝您的任何建議和對我醜陋的英語感到抱歉。

+0

您應該使用一個轉換器的轉換之間枚舉值和一個字符串:https://www.codeproject.com/Tips/868163/IValueConverter-Example-and-Usage-in-WPF – mm8

回答

2

您應該使用轉換器在enum值和string之間進行轉換。

請參考以下示例代碼。

轉換器:

public class EnumToStringConv : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return value; 

     return (X509FindType)Enum.Parse(typeof(X509FindType), value.ToString(), true); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((X509FindType)value).ToString(); 
    } 
} 

查看:

<ObjectDataProvider x:Key="x509FindTypes" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> 
    <ObjectDataProvider.MethodParameters> 
     <x:Type TypeName="cryptography:X509FindType" /> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

<local:EnumToStringConv x:Key="EnumToStringConv" /> 
... 

<ComboBox SelectedItem="{Binding YourStringProperty, Converter={StaticResource EnumToStringConv}}" 
      ItemsSource="{Binding Source={StaticResource x509FindTypes}}" /> 

視圖模型:

private string _s = "FindByTimeExpired"; 
public string YourStringProperty 
{ 
    get { return _s; } 
    set { _s = value; } 
} 
+0

工程很好,謝謝你mm8! – Kris82