Я упростил приложение, чтобы показать мой вопросИзменения ViewModel
При нажатии кнопки, он изменяет Text
свойства ViewModel
и TextBlock.Text
обновляются.
MainPage.xaml
<StackPanel>
<Button Click="ButtonBase_OnClick">Button to change text</Button>
<TextBlock Text="{x:Bind ViewModel.Text, Mode=OneWay}"></TextBlock>
</StackPanel>
MainPage.xaml.cs
public MainPage()
{
ViewModel = new ViewModel();
this.InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
ViewModel.Text = "x:Bind works";
}
ViewModel класс имеет одно свойство строки (текст) и реализован интерфейс INotifyPropertyChange.
Проблема начинается тогда, когда ViewModel
не установлен в CTOR (т.е. ViewModel является недействительным и изменен во время выполнения):
public MainPage()
{
//ViewModel = new ViewModel();//this line has been removed
this.InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
ViewModel = new ViewModel();//this line has been added
ViewModel.Text = "x:Bind does not work";
}
Complited связывание не работает (текст не изменяется) и я не мог понять, почему это так ... Мне нужно изменить viewModel из null (vm имеет значение null, потому что он ждет некоторых данных в реальном приложении)
Конечно, потому что нет никакого уведомления, что ViewModel изменилось –
Вы имеете в виду свойство ViewModel? Как я могу уведомить об изменении - я не хочу реализовывать INotifyPropertychange в MainPage – Alamakanambra
Без магии вам нужно было уведомить страницу о том, что содержимое ViewModel изменилось. Неважно, как вы это делаете, но у вас есть –