This is how we do it normally:
public class ViewModel : INotifyPropertyChanged
{
string _test;
public string Test
{
get { return _test; }
set
{
_test = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string property = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
Now our property can be used by multiple elements in the view, e.g.:
<TextBox Text="{Binding Test, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding Test}" />
Changing value in TextBox
will update content of TextBlock
. As well as we can set value in the view model and view will update it automatically.
If we write view model like this
public class ViewModel
{
public string Test { get; set; }
}
then the view is still working (e.g. changing value in TextBox
will update TextBlock
). Of course it's not possible to easily update Test
value from view model anymore (no more event to rise). But my question is about view: Why view is able to work? Does it construct something more in background or is it a logic which checks for something?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…