Если я правильно понимаю вопрос, то вы хотите, чтобы и ClassA, и ClassB могли обновлять одно и то же свойство, верно?Если это так, то у меня будет интерфейс, который поддерживает обратный вызов для этого свойства, поэтому что-то вроде этого:
public class IMyIterface
{
event EventHandler<int> OnChanged;
}
ClassA и ClassB должны оба реализовать этот интерфейс и вызывать его, когда они хотят изменить значение:
public class ClassA : IMyIterface
{
public event EventHandler<int> OnChanged;
public void SomethingChanged()
{
this.OnChanged?.Invoke(this, 42);
}
}
// .. same for ClassB...
Затем у вас есть некоторый родительский объект, который создает их, реализует само значение с помощью INPC и подписывается на эти события:
public class ParentViewModel
{
private ClassA ClassA = new ClassA();
private ClassB ClassB = new ClassB();
public int MyValue ... // <- implements INPC
public ParentViewModel()
{
this.ClassA.OnChanged += (s, e) => this.MyValue = e;
this.ClassB.OnChanged += (s, e) => this.MyValue = e;
}
}
Этот родительский объект - это то, к чему привязывается ваше представление.Преимущества таких вещей:
- представление ничего не знает о ClassA или ClassB или логике того, как они обновляют значение
- , которое вы можете легко указатьТочки останова в вашем логическом коде, чтобы убедиться, что он работает правильно с помощью отладчика
- , вы можете выполнить его модульное тестирование
Сделайте этот шаг еще дальше, и ClassA / ClassB - это свойства в ParentViewModel типа IMyIterfaceкоторые устанавливаются через инфраструктуру внедрения зависимостей, но это тема для другого поста.