如何在WPF

时间:2018-06-05 17:03:24

标签: c# wpf data-binding

这是我的问题,我有以下数据结构:

public class Job : INotifyPropertyChanged {
    public StateEnum State {
        get { return this.state; }

        private set {
            this.state = value;
            this.OnPropertyChanged();
        }
    }
}

public class MainWindow : Window, INotifyPropertyChanged 
    public List<Job> Jobs {
        get { return this.jobs; }

        private set {
            this.jobs = value;
            this.OnPropertyChanged();
        }
    }
}

我想在主窗口中显示作业的全局状态摘要。

我首先尝试在Jobs列表上创建数据绑定,然后使用自定义IValueConverter显示全局状态。问题:当作业状态发生变化时,它不会刷新(因为它绑定到集合而不是状态)。

ProgressState="{Binding Jobs, Converter={StaticResource JobsToProgressState}, ElementName=MainWindow}"

所以我试图找到一个解决方案,我可以将作业的所有嵌套属性绑定到IMultiValueConverter。我没有找到任何语法来使这项工作。

是否可以做类似的事情?

编辑: 我想做像

这样的事情
ProgressState="{Binding Jobs[*].State, Converter={StaticResource JobsToProgressState}, ElementName=MainWindow}"

并在JobsToProgressState转换器中检索包含所有作业状态( StateEnum [] )的数组。

1 个答案:

答案 0 :(得分:0)

问题是当OnPropertyChanged的记录发生变化时,IList不会被触发。您需要将OnPropertyChanged的{​​{1}}委托给您的Job - 列表。

这个粗略的实现将做你想要的。

Jobs

当您不再需要时,不要忘记取消您的活动注册。