Я новичок в WPF, поэтому, возможно, что-то основное, что мне не хватает здесь. У меня есть приложение, которое выглядит следующим образом:Обновление пользовательского интерфейса на основе изменения свойств в модели вида
<Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test Application" Height="647" Width="723" Background="#88B0FF">
<DockPanel Name="MainDock">
<Button DockPanel.Dock="Top" Margin="5,0,5,0" x:Name="PingButton" Click="PingButton_OnClick">Ping</Button>
<TextBox Text="{Binding Path=Output}" />
</DockPanel>
</Window>
Код-за, как это:
public partial class MainWindow : Window
{
private Model _applicationModel = new Model();
public Model ApplicationModel {
get { return _applicationModel; }
set { _applicationModel = value; }
}
public MainWindow()
{
InitializeComponent();
this.DataContext = ApplicationModel;
ApplicationModel.Output = "Not clicked";
}
private void PingButton_OnClick(object sender, RoutedEventArgs e)
{
ApplicationModel.Output = "Clicked";
}
}
У меня есть небольшой класс с именем модели, которая реализует INotifyPropertyChanged.
public class Model : INotifyPropertyChanged
{
public string Output { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Я запустил это приложение, и в текстовом поле отображается текст «Не нажата». Когда я нажимаю кнопку, я ожидаю, что текст изменится. Это не. Объект «ApplicationModel» обновляется, и это отражается в DataContext; Однако у меня есть точка останова в методе OnPropertyChanged(), и, похоже, она никогда не вызывается.
Что я делаю неправильно?
Бах, я надеялся на магию отражения здесь. Какие-нибудь рекомендации по сокращению схемы здесь? –
@KeithRipley Посмотри мой обновленный ответ –
Я видел, это определенно работает для меня. :-) –