使用propertychanged处理程序绑定枚举而不是引发转换器

时间:2016-09-07 10:33:28

标签: c# wpf binding enums converters

我不是用WPF进行C#编程的新手,我从来不需要这样做,但现在我需要它,而且我现在已经停留了一段时间了。我需要绑定一个附加了它的OnPropertyChanged方法的枚举,以便每次枚举更改时引发转换器。我有枚举的以下代码:

    private WindowState windowstate;
    public enum WindowState
    {
        INITIAL = 0,
        LANGUAGE = 1,
        SENSOR = 2,
        PARAMETERS = 3,
        LEGAL = 4,
        PRIVACY = 5,
        ABOUT = 6,
        MANUAL = 7
    }
    public WindowState State
    {
        get { return windowstate; }
        set { windowstate = value; OnPropertyChanged("State"); }
    }

在我绑定enum的xaml上我得到了这个:

Color="{Binding State, Converter={StaticResource ButtonMenuColor}, ConverterParameter=language, ElementName=userControl}"

我想要的是根据枚举值改变按钮的颜色。是否可以这样做,或者WPF由于某种原因不支持这个?

这是转换器代码:

class ButtonMenuColor : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Lynx.Windows.Herramientas.WindowState state = (Lynx.Windows.Herramientas.WindowState)value;
        string param = parameter as string;

        if (state.ToString().ToLower() == param)
            return Application.Current.FindResource("white") as SolidColorBrush;

        return Application.Current.FindResource("buttonmenu_color") as SolidColorBrush;
    }

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

2 个答案:

答案 0 :(得分:1)

我真正想到的是:

  

将绑定模式更改为双向。添加updateSourceTrigger =   PropertyChanged,NotifySourceUpdated = True

     

尝试使用后备值检查绑定是否正确。

     

也许您的控件在设置值之前加载。

     

并将您的枚举值设为   {x:static命名空间:Class.WindowState + LANGUAGE}

答案 1 :(得分:0)

似乎你绑定到用户控件,但你的属性是在viewmodel?

因此将绑定更改为

Color="{Binding DataContext.State, Conv...}"

因此,您绑定到userControl的viewmodel的State属性。如果State是userControl的DependencyProperty,则绑定应该有效。