Я борюсь с необычной реализацией Mvvm. У меня есть многостраничное приложение, в котором мне нужно получить доступ к некоторым свойствам в нескольких представлениях и убедиться, что изменения в одном представлении обновляются во всех из них. Я пытаюсь добиться этого с помощью следующей реализации:
public class BaseViewModel : ViewModelBase
{
public string SharedProperty
{
get=>BaseModel.sharedProperty;
set
{
if(CustomSet(ref BaseModel.sharedProperty, value, SharedRaise))
ReloadStuff();
}
}
public abstract void ReloadStuff();
public void SharedRaise(string caller) => RaisePropertyChanged(caller);
private bool CustomSet<T>(ref T prop, T value, Action<string> raise, [CallerMemberName] string caller)
{
if ((prop == null && value == null) || (prop != null && prop.Equals(value)))
return false;
prop = value;
raise.Invoke(caller);
return true;
}
public static class BaseModel
{
public static string sharedProperty;
}
}
public class Child1ViewModel : BaseViewModel
{
private string someData;
public string SomeData
{
get=>someData;
set=>Set(ref someData, value);
}
public override void ReloadStuff()
{
SomeData = GetNewData();
}
}
public class Child2ViewModel : BaseViewModel
{
private string someOtherData;
public string SomeOtherData
{
get=>someData;
set=>Set(ref someOtherData, value);
}
public override void ReloadStuff() { } //Do nothing, better would be to remove the overriden method in Child2ViewModel at all
}
Требуемое поведение должно быть следующим:
При изменении свойства SharedProperty из Child2View метод RaisePropertyChanged ("SharedProperty") должен вызываться на любом активном экземпляре, производном от BaseViewModel. Кроме того, каждый переопределенный метод ReloadStuff () в любом экземпляре, производном от BaseViewModel, должен вызываться.
К сожалению, пока это не работает, но сейчас я надеюсь, что я что-то пропустил, а не все это руби sh. Любая помощь будет принята с благодарностью.