güncellemiyor Cilt, bunu test ederken enC# WPF MVVM Ben enum verilen Karşılamanız gözlemlenebilir koleksiyonu içindeki elemanların sayısını görüntülemek için bir dönüştürücü kullanarak basit bağlama yapmaya çalışıyorum
Aşağıdaki kod çalışır ABC D. diyelim diğer projemle birlikte, ancak en temel proje bağlamada güncellenmiyor. Tam olarak aynı kod diğer projenin içinde çalışır (gerçekten garip). Ben bağlayıcı
<Label Content="{Binding Source={x:Static viewmodels:TestViewModel.Instance}, Path=TestModels, Converter={StaticResource TestConverter}, Mode=OneWay}"></Label>
Converter
class TestConverter : IValueConverter
{
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (value == null)
return 0;
var v = (ObservableCollection<TestModel>)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();
}
}
Modeli
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));
}
}
}
ViewModel
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<TestModel> _testModels;
private TestViewModel()
{
_testModels = new ObservableCollection<TestModel>();
}
public ObservableCollection<TestModel> TestModels
{
get { return _testModels;}
set
{
_testModels = value;
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(null));
}
}
}
yapıyorum Nasıl
Ben çalışıyorum
Basit test durumu Sen TestModels
koleksiyonuna bağlanmasının, o yüzden dönüştürücü yalnızca o mülkiyet değişiklikleri çağrılan olacak
for (var i = 0; i != 100; i++)
{
TestViewModel.Instance.TestModels.Add(new TestModel());
}
her ikisi de C# 6 kullanıyor? dönüştürücünün çağrılıp yapılmadığını kontrol edebilir misin? – sexta13