我不是用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();
}
}
答案 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,则绑定应该有效。