2011-01-17 8 views
1

Ich habe eine ENUM-Eintrag alle möglichen Einstellungen:wpf Abhängigkeitseigenschaft Enum Sammlung

public enum Settings 
{ 
    Settings1, 
    Settings2, 
    Settings3 
} 

In meiner Benutzerkontrolle ich eine neue depedency Eigenschaft implementieren mag, dass es zu benutzen, wie dies eine Liste der Einstellungen und in der Lage hält :

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

Wie soll ich das umsetzen?

+0

Sollten Ihre Einstellungen wirklich eine Enum sein? Ist es wirklich eine Einstellung mit einem enum [Flags] -Attribut, oder sind es Einstellungen mit unterschiedlicher Funktionalität? –

Antwort

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

Ich habe stattdessen ChangedCallBack verwendet, aber deine Antwort ist immer noch gut genug :) – Sys

3

In Ihrem Usercontrol, machen Sie Ihre Abhängigkeitseigenschaft eine Sammlung von Settings (vielleicht Ihre Enum Setting umbenennen), und dann können Sie es in XAML füllen mit:

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

Ich habe nicht getestet :)

Wenn Sie mit einer durch Kommata getrennte Liste bleiben möchten, dann Usercontrol Einstellungen DP einen String machen, und dann auf dem Grundstück veränderten Event-Handler, teilen Sie die Zeichenfolge und verwenden Enum.Parse auf jedes Ergebnis die Einstellungen zu speichern, wie Ihre Setting enum Art.

Verwandte Themen