Я пытаюсь понять модель mvvm. Поэтому я следовал за этим учебником по YouTube: YoutubeVideoMVVM TextBlock не обновляет текст во время выполнения
У меня есть класс под названием Person. В первом текстовом поле представления вы можете вставить свое имя, а во втором - имя. Textblock должен автоматически обновляться с помощью свойства fullname, но это происходит только во время разработки, и я не знаю, почему.
Вот XAML из MainPage:
<Page
x:Class="PropertyChanged.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:PropertyChanged"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:m="using:PropertyChanged.Models"
mc:Ignorable="d">
<Page.Resources>
<m:Person x:Key="person"/>
</Page.Resources>
<Grid DataContext="{Binding Source={StaticResource person}}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto">
<TextBox Text="{Binding Path=Name, Mode=TwoWay}"></TextBox>
<TextBox Text="{Binding Path=Lastname, Mode=TwoWay}"></TextBox>
<TextBlock Text="{Binding Path=Fullname}" Width="Auto"></TextBlock>
</StackPanel>
</Grid>
И мой Person класс в пространстве имен PropertyChanged.Models:
public class Person : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set { name = value;
OnPropertyChanged("Name");
OnPropertyChanged("FullName");
}
}
private string lastname;
public string Lastname
{
get { return lastname; }
set { lastname = value;
OnPropertyChanged("Lastname");
OnPropertyChanged("FullName");
}
}
private string fullname;
public string Fullname
{
get { return name +" " +lastname; }
set { fullname = value;
OnPropertyChanged("Fullname");
}
}
public Person()
{
if (DesignMode.DesignModeEnabled)
{
this.Name = "Matthias";
this.Lastname = "Herrmann";
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Typo: 'OnPropertyChanged (« FullName »);' и свойство называется 'Fullname' с нижним регистром« n ». –
Обратите внимание, что это хорошее место (и причина) для использования оператора 'nameof' вместо фактической строки. – BradleyDotNET
О, ладно, спасибо, что это может быть логическая ошибка от меня –