C#WPF MVVM绑定不更新

我正在尝试使用转换器进行简单绑定,以显示满足给定枚举的可观察集合内的元素计数,让我们说ABC D.

当我用我的其他项目测试它时,下面的代码工作,但是最基本的项目绑定没有得到更新。 完全相同的代码在其他项目中工作(真的很奇怪)。

我是如何做绑定的

 

变流器

 class TestConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return 0; var v = (ObservableCollection)value; return $"{v.Count} / {v.AsParallel().Count(x => x.TestEnum == TestEnum.A)} / {v.AsParallel().Count(x => x.TestEnum == TestEnum.B)} / {v.AsParallel().Count(x => x.TestEnum == TestEnum.C)} / {v.AsParallel().Count(x => x.TestEnum == TestEnum.D)}"; } public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

模型

 public enum TestEnum { A, B, C, D } public class TestModel:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private TestEnum _testEnum; public TestModel() { TestEnum = (TestEnum)(TestViewModel.Instance.rnd.Next(0,3)); } public TestEnum TestEnum { get { return _testEnum; } set { _testEnum = value; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(null)); } } } 

视图模型

 public class TestViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private static readonly TestViewModel _instance = new TestViewModel(); public Random rnd = new Random(); public static TestViewModel Instance { get { return _instance; } } private ObservableCollection _testModels; private TestViewModel() { _testModels = new ObservableCollection(); } public ObservableCollection TestModels { get { return _testModels;} set { _testModels = value; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(null)); } } } 

我试图开始工作的简单测试用例

 for (var i = 0; i != 100; i++) { TestViewModel.Instance.TestModels.Add(new TestModel()); } 

您绑定到TestModels集合,因此只有在该属性更改时才会调用转换器。 您的循环更改集合中的元素,但它不会更改TestModels本身的值。 如果你想要这个,那么你基本上有两个选择:

1)使用附加行为,并在首次创建TestModels绑定时使其订阅INotifyCollectionChanged CollectionChanged属性。 然后,它需要某种方式将结果提供回Label,这可以通过单独的附加属性来实现。

2)在你的视图模型中完成所有这些操作,无论如何它应该是应该完成的。 每当您发现自己在转换器中执行除基本的,与应用程序无关的最基本任务之外的任何事情时,通常都表明您的视图模型层无法正常工作。