我有以下这个XAML:
<ListBox Background="{Binding CurrentJob, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource JobToColorConverter}, Mode=TwoWay}">
我想根据ListBox
属性更改CurrentJob
背景。
以下是我的代码的一部分:
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框架不知道属性何时发生变化。这是对的吗?
答案 0 :(得分:2)
private Job CurrentJob;
需要触发PropertyChanged
事件。从INotifyPropertyChanged
接口继承您的类并以这种方式实现它:
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler( this, new PropertyChangedEventArgs(name) );
}
}
private Job currentJob;
public Job CurrentJob
{
get { return curentJob; }
private set
{
if (this.currentJob != value)
{
this.currentJob = value;
OnPropertyChanged("CurrentJob");
}
}
}
答案 1 :(得分:0)
您的财产是私有的,请尝试将其公开。
此外,鉴于该属性是只读的,并且不会传播来自((FooClass) WindowsPanel.Children[0]).CurrentJob
的更改,您可以进行绑定OneTime。