저는 WPF를 처음 사용했기 때문에 여기서 누락 된 기본적인 내용이있을 수 있습니다.뷰 모델의 속성 변경을 기반으로 UI 업데이트
<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 업데이트 된 답변보기 –
나는 그것이 분명히 나를 위해 작동한다는 것을 알았다. :-) –