带有属性改变处理程序的绑定enum没有引发转换器

本文关键字:enum 转换器 绑定 属性 改变 处理 程序 | 更新日期: 2023-09-27 18:05:57

我不是新的c#编程与WPF,我从来没有需要这样做,但现在我需要它,我被困了一段时间了。我需要绑定一个枚举,它附加了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();
    }
}

带有属性改变处理程序的绑定enum没有引发转换器

我想到的是:

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

尝试一个回退值来检查绑定是否正确。

可能你的控件在你的值设置之前加载。

,并将枚举值设置为{x:静态命名空间:类。WindowState +语言}

似乎你是绑定到一个用户控件,但你的属性是在一个视图模型?

所以把你的绑定改为

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

所以你绑定到你的userControl的视图模型的State属性。如果State是userControl的DependencyProperty,那么绑定应该可以工作。