2011-01-17 5 views
1

내가 열거 목록 가능한 모든 설정이 :WPF 종속성 속성 열거 수집

<my:Control Settings="Settings1, Settings2" /> 

어떻게 구현해야합니까? 당신의 UserControl에서

+0

설정이 실제로 열거 형이어야합니까? enum [Flags] 속성을 가진 설정 중 하나입니까? 아니면 별개의 기능을 가진 설정입니까? –

답변

0
public class StringDelimitedToEnumListConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     List<Settings> retval = new List<Settings>(); 
     if(value == null || value.GetType() != typeof(string) || targetType != typeof(List<Settings>)) 
     { 
      throw new ArgumentException("value must be of type string, target type must be of type List<Settings>"); 
     } 
     string workingValue = value.ToString(); 
     if (String.IsNullOrEmpty(workingValue)) 
     { 
      throw new ArgumentException("value must not be an empty string"); 
     } 
     if (workingValue.Contains(',')) 
     { 
      string[] tokens = workingValue.Split(','); 
      foreach (string s in tokens) 
      { 
       retval.Add((Settings)Enum.Parse(typeof(Settings), s)); 
      } 
      return retval; 
     } 
     else 
     { 
      //there was only 1 value 
      retval.Add((Settings)Enum.Parse(typeof(Settings),workingValue); 
      return retval; 
     } 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     //do we care? 
     throw new NotImplementedException(); 
    } 
} 
+0

대신 ChangedCallBack을 사용했지만 대답은 여전히 ​​충분합니다. :) – Sys

3

, 당신의 종속성 속성 Settings의 모음 (아마도 Setting로 열거 이름을 변경) 확인 후, 당신은으로 XAML에서 그것을 채울 수 있습니다 :이 테스트를하지 않은

<my:Control> 
    <my:Control.Settings> 
    <x:Static Member="my:Setting.Setting1" /> 
    <x:Static Member="my:Setting.Setting2" /> 
    </my:Control.Settings> 
</my:Control> 

:)

쉼표로 구분 된 목록을 사용하려면 UserControl 설정 DP를 문자열로 만든 다음 속성 변경 이벤트 처리기에서 문자열을 분할하고 각 결과에 Enum.Parse을 사용하여 설정을 Setting 열거 형으로 저장합니다 유형.