未调用仅获取 属性 上的转换器 (WPF)
Converter on a get-only property is not called (WPF)
我有以下这个 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 框架不知道 属性 何时更改。正确吗?
您的 属性 是私人的,请尝试设为 public。
此外,鉴于 属性 是只读的并且不会传播来自 ((FooClass) WindowsPanel.Children[0]).CurrentJob
的更改,您可以进行绑定 OneTime。
private Job CurrentJob;
需要触发 PropertyChanged
事件。从 INotifyPropertyChanged
接口继承你的 class 并以这种方式实现它:
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");
}
}
}
我有以下这个 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 框架不知道 属性 何时更改。正确吗?
您的 属性 是私人的,请尝试设为 public。
此外,鉴于 属性 是只读的并且不会传播来自 ((FooClass) WindowsPanel.Children[0]).CurrentJob
的更改,您可以进行绑定 OneTime。
private Job CurrentJob;
需要触发 PropertyChanged
事件。从 INotifyPropertyChanged
接口继承你的 class 并以这种方式实现它:
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");
}
}
}