【发布时间】:2016-10-16 17:47:03
【问题描述】:
我有以下这个 XAML:
<ListBox Background="{Binding CurrentJob, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource JobToColorConverter}, Mode=TwoWay}">
我想根据CurrentJob 属性更改我的ListBox 背景。
这是我背后的一部分代码:
private Job CurrentJob => ((FooClass) WindowsPanel.Children[0]).CurrentJob;
这是我的(虚拟)转换器:
public class JobToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var j = (Job) value;
return new SolidColorBrush(Color.FromArgb(100, 60, 116, 154))
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我验证了
现在,我的问题是,当CurrentJob 更改时,不会触发转换器事件,并且永远不会调用我的Convert 方法。
我认为这是因为CurrentJob 是一个只读属性,因此 WPF 框架不知道该属性何时更改。对吗?
【问题讨论】:
-
您必须在您的类中实现
INotifyPropertyChanged接口,并确保在您更改属性时触发PropertyChanged事件。使用=>表示法的自动表达式不适合这里。 -
此外,对于 WPF 数据绑定,
CurrentJob必须是公共属性,而不是私有字段。
标签: c# wpf xaml converter ivalueconverter