带有属性改变处理程序的绑定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();
}
}
我想到的是:
将绑定模式更改为双向绑定。add updateSourceTrigger =PropertyChanged, NotifySourceUpdated = True
尝试一个回退值来检查绑定是否正确。
可能你的控件在你的值设置之前加载。
,并将枚举值设置为{x:静态命名空间:类。WindowState +语言}
似乎你是绑定到一个用户控件,但你的属性是在一个视图模型?
所以把你的绑定改为
Color="{Binding DataContext.State, Conv...}"
所以你绑定到你的userControl的视图模型的State属性。如果State是userControl的DependencyProperty,那么绑定应该可以工作。