Привет Я пытаюсь изучить простую привязку данных в wpf. Я попробовал, и я не удается .. посоветуете пути ..Простая привязка данных в приложении wpf
<Window x:Class="WpfTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="250" Width="350">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="50"/>
<RowDefinition Height="50"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Label Content="First Name" Grid.Row="0" Grid.Column="0" Height="25" HorizontalAlignment="Stretch"/>
<Label Content="Last Name" Grid.Row="1" Grid.Column="0" Height="25" HorizontalAlignment="Stretch"/>
<Label Content="Full Name" Grid.Row="2" Grid.Column="0" Height="25" HorizontalAlignment="Stretch"/>
<TextBox x:Name="fName" Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" Grid.Row="0" Grid.Column="1" Height="25" HorizontalAlignment="Stretch"/>
<TextBox x:Name="lName" Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="1" Height="25" HorizontalAlignment="Stretch"/>
<Label x:Name="lblFullName" Content="{Binding FirstName}" Grid.Row="2" Grid.Column="1" Height="25" HorizontalAlignment="Stretch"/>
<Button x:Name="cmdCommand" Content="Command" Grid.Row="3" Grid.Column="1" Margin="2" VerticalAlignment="Center" HorizontalAlignment="Center" Click="cmdCommand_Click"/>
</Grid>
</Window>
Теперь вы видите, я хочу, чтобы метка lblFullName будет автоматически обновляться, как только я ввожу имя в текстовых полях.
Теперь мой файл отделенного кода выглядит следующим образом:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
if (value != _firstName)
{
_firstName = value;
OnPropertyChanged("FirstName");
}
}
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
if (value != _lastName)
{
_lastName = value;
OnPropertyChanged("LastName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Notifies objects registered to receive this event that a property value has changed.
/// </summary>
/// <param name="propertyName">The name of the property that was changed.</param>
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public MainWindow()
{
InitializeComponent();
}
private void cmdCommand_Click(object sender, RoutedEventArgs e)
{
lblFullName.Content = FirstName + " " + LastName;
}
}
Излишне говорить, даже нажав на кнопку управления не работает ...
какие-либо предложения?
Теперь, когда вы отвлекли мой взгляд на MVVM, я попробовал решение, которое вы предложили. Я создал два класса: 1. Person 2. PersonViewModel. Но при запуске кода он показывает исключение в строках «person in person.FirstName is null» .. Дело в том, что во время инициализации метка запрашивает контент и этот код выполняется. поскольку лицо не инициализировано, возникает исключение. Лицо лица; общественная строка ПолноеИмя { получить { обратный string.Format ("{0} {1}", person.FirstName, person.LastName); } } – Ashutosh
Пожалуйста, укажите мне соответствующий учебник/учебный материал MVVM. С уважением – Ashutosh
@ facebook-1069905816372422 Я исправил ошибку в классе PersonViewModel. Учебное пособие и ссылки на исследования не относятся к теме «Переполнение стека». Используйте веб-поиск, чтобы найти ресурсы. –