未调用仅获取 属性 上的转换器 (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");
        }
    }
}