Я проверил код, который вы предоставили, и не думаю, что с ним есть какие-либо проблемы Однако проблема может быть в коде вашей страницы. Вы случайно не используете это как объявление свойства?
public MyViewModel MyViewModel => new MyViewModel();
Поскольку в этом случае каждый доступ к свойству MyViewModel
оценивается как новый экземпляр класса MyViewModel
. В этой конфигурации вы должным образом измените свойство, но пользовательский интерфейс никогда не заметит, поскольку вы обновите свойство в новом экземпляре. Если вы вместо этого используете
public MyViewModel MyViewModel { get; } = new MyViewModel();
Вы получите правильное поведение при создании только одного экземпляра при создании страницы.
У меня есть следующий код:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public MyViewModel MyViewModel { get; } = new MyViewModel();
private void Button_Click(object sender, RoutedEventArgs e)
{
MyViewModel.MyClass.MyString = "test";
}
}
А мой простой ViewModelBase
:
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}