Не понимаю связи между View и ViewModel. Помогите найти ошибку

В окне 2 элемента: TextBox - в который вводится текст, и Label - в который этот текст передается. При запуске программы Label считывает дефолтные данные из TextBox, но если впоследствии менять текст, то в Label измененный текст не отображается.

<Window x:Class="Example_INotifyPropertyChenged.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Example_INotifyPropertyChenged.ViewModels"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
    <local:ViewModel/>
</Window.DataContext>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="c0"></ColumnDefinition>
        <ColumnDefinition x:Name="c1"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition x:Name="r0"></RowDefinition>
        <RowDefinition x:Name="r1" ></RowDefinition>
    </Grid.RowDefinitions>
    <TextBox x:Name="textBoxtText" Grid.Row="0" Grid.Column="0" Text="{Binding Mode=TwoWay, Path=TextBoxText, UpdateSourceTrigger=PropertyChanged}"></TextBox>
    <Label x:Name="label" Grid.Row="0" Grid.Column="1" Content="{Binding Mode=Default, Path=LabelContent}"></Label>

</Grid>

и сама ViewModal

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;

namespace Example_INotifyPropertyChenged.ViewModels
{
    public class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged([CallerMemberName] string PropertyName = null)
        {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }
    private string _textBoxText="textBox";
    public string TextBoxText
    {
        get => _textBoxText;
        set
        {
            if(_textBoxText!=value)
            _textBoxText = value;
            OnPropertyChanged(LabelContent);
        }
    }        
    public string LabelContent { get => TextBoxText;}
}

}


Ответы (1 шт):

Автор решения: Максим Галушко

Ошибка заключалась в том, что свойство TextBoxTex тоже нужно было извещать о том, что оно изменилось:

            set
        {
            if(_textBoxText!=value)
            _textBoxText = value;
            OnPropertyChanged();//извещение всех кто привязан к этому свойству о том, что оно изменилось...
            OnPropertyChanged(nameof(TextBlogText));//извещение всех кто привязан к свойству LabelContent о том, что оно  изменилось
        }
→ Ссылка