I App vereinfacht mein Problem zu zeigenÄndern Viewmodel
Wenn ich Schaltfläche klicken, wird es Text
Eigenschaft ViewModel
und TextBlock.Text
ändert aktualisiert wird.
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";
}
Ansichtsmodell Klasse hat eine String-Eigenschaft (Text) und implementiert INotifyPropertyChange Schnittstelle.
Problem beginnt, wenn ViewModel
nicht in Ctor gesetzt ist (dh Ansichtsmodell ist null und in der Laufzeit geändert):
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 Bindung nicht funktioniert (Text nicht verändert wird) und ich konnte nicht herausfinden, warum es so ist ... Ich muss viewModel von null ändern (vm ist null, weil es auf einige Daten in der realen App wartet)
Natürlich, weil es keine Benachrichtigung, die Ansichtsmodell geändert hat –
Sie meinen ViewModel-Eigenschaft? Wie kann ich über Änderung benachrichtigen - ich möchte INotifyPropertychange in MainPage nicht implementieren – Alamakanambra
Ohne Magie mussten Sie die Seite benachrichtigen, dass der Inhalt von ViewModel geändert hat. Es spielt keine Rolle, wie Sie es tun, aber Sie müssen –