Получение inotifypropertychanged для уведомления WPF между различными классами
У меня есть код WPF, в котором я не могу получать уведомления об обновлениях свойств.
Мой код должен иметь такую структуру:
A1… An (view .xaml & .xaml.cs) → B1… Bn (viewmodel .cs) C (model .cs, my business logic) D (utility .cs like constants etc) E (custom object .cs, that will be x-times instantiated in my model C)
Диаграмма: диаграмма.bmp - Google Диск[^]
Что мне нужно, так это то, что только мой пользовательский объект реализует InotifyPropertyChanged, а не мои viewmodels, но я не мог получить уведомление Gui, когда устанавливал свойства моих пользовательских объектов (E) внутри моих моделей (C).
Вот пример того, что у меня есть до сих пор:
Что я уже пробовал:
В моем представлении .xaml:
<Button Content="{Binding content, Mode=OneWay, NotifyOnTargetUpdated=True}" Command="{Binding action}" />
In my views .xaml.cs (код позади):
public A1() { InitializeComponent(); DataContext = new B1(); }
На мой взгляд, Models .cs:
public class B1 : C { public string content => MyObject.Text; public ICommand action => MyObject.Pressed; }
В моих моделях .cs:
public class C : D { // here i instantiate my object(s) public E MyObject = new E(); // here comes my stuff ... } public class D { //my constants and wrappers ... }
И для моих пользовательских объектов (они будут x-раз созданы в моей модели):
public class E : INotifyPropertyChanged { private string _text = String.Empty; public string Text { get => _text set => SetProperty(ref _text, value); } private readonly _DelegateCommand _pressed; public ICommand Pressed => _pressed; private void OnPressed(object commandParameter, string value) { Text = "newtext"; _pressed.InvokeCanExecuteChanged(); } private bool CanExecute(object commandParameter) { ... // some logic here } public E() { _pressed = new _DelegateCommand(OnPressed, CanExecute); } public event PropertyChangedEventHandler PropertyChanged; public bool SetProperty<T>(ref T field, T newValue, [CallerMemberName]string propertyName = null) { if (!EqualityComparer<T>.Default.Equals(field, newValue)) { field = newValue; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); return true; } return false; } }
Может ли кто-нибудь помочь мне в этом, пожалуйста?
Заранее большое спасибо за любые подсказки!