Я только начал изучать настольное приложение WPF. Я написал несколько слов, например, простой код, чтобы выполнить операцию привязки.Элементы управления привязкой WPF
Проблема в следующем: Я хотел тип sth в TextBox и видеть его одновременно в TextBlock, но после компиляции и запуска приложения элементы управления в форме не ведут себя так, как я описал.
Может ли кто-нибудь помочь мне исправить это?
MainWindow.xaml:
<Window x:Class="Napisy.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:Napisy"
xmlns:mv="clr-namespace:Napisy.ModelWidoku"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<mv:NapisyModelWidoku x:Key="napisyModelWidoku"/>
</Window.Resources>
<Grid DataContext="{StaticResource napisyModelWidoku}">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="1" Margin="10,10,10,10" Text="{Binding Path=Tekst,Mode=TwoWay}"/>
<TextBlock Grid.Row="2" Margin="10,10,10,10" Text="{Binding Path=Wyswietl,Mode=OneWay}"/>
</Grid>
</Window>
ViewModel код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Napisy.Model;
using System.ComponentModel;
namespace Napisy.ModelWidoku
{
public class NapisyModelWidoku : INotifyPropertyChanged
{
NapisyModel model = new NapisyModel();
public string Tekst
{
get
{
return model.Tekst;
}
set
{
model.Tekst = value;
OnPropertyChanged(nameof(Tekst));
OnPropertyChanged(nameof(Wyswietl));
}
}
public string Wyswietl
{
get
{
return model.Tekst;
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string nazwa)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nazwa));
}
}
}
Код модели:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Napisy.Model
{
public class NapisyModel
{
public string Tekst { get; set; }
}
}
EDIT:
- Описание проблемы,
- перед классом NapisyModelWidoku, Вход в помещение Модификатор общественности добавил,
- добавил OnPropertyChanged (nameof (TEKST));
- вместо OnPropertyChanged ("Wyswietl"); используется OnPropertyChanged (nameof (Wyswietl));
После ввода текста в TextBox все еще TextBlock не обновляется автоматически. Еще надеюсь, что я получаю советы. Спасибо
* "не ведут себя, как я предполагал «* - на самом деле не является хорошим описанием проблемы. Что не работает? Я вижу, что вы забыли выпустить уведомление для самого Tekst: 'OnPropertyChanged (nameof (Tekst));' – Sinatr
EDIT: «класс NapisyModelWidoku» изменен на «публичный класс NapisyModelWidoku». Все еще не работает. –