属性更改时更新字段

时间:2009-04-28 12:22:27

标签: c# wpf xaml

这可能是一个基本问题,因为我是WPF新手。

我有一个包含TextBox和Button的UserControl(此问题简化了代码):

<UserControl x:Name="this">
    <TextBox Text="{Binding ElementName=this, Path=MyProperty.Value}"/>
    <Button x:Name="MyButton" Click="Button_Click"/>
</UserControl>

在后面的代码中,我将“MyProperty”注册为DependencyProperty:

public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(MyProperty), typeof(MyPropertyNumeric), new UIPropertyMetadata(null));

“MyProperty”是我定义的类,它实现了INotifyPropertyChanged。 “MyProperty.Value”属于object类型。

单击该按钮时,我在代码隐藏中更改了MyProperty.Value。我想让TextBox自动显示新值。我希望上面的内容能够正常工作,因为我已经实现了INotifyPropertyChanged - 但事实并非如此......任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

在更新时,您是否使用属性名称调用OnPropertyChanged事件?

例如,

public class MyProperty : INotifyPropertyChanged {
  private string _value;

  public string Value { get { return _value; } set { _value = value; OnPropertyChanged("Value"); } }

  public event PropertyChangedEventHandler PropertyChanged;

  protected void OnPropertyChanged(string name) {
    PropertyChangedEventHandler handler = PropertyChanged;
    if(handler != null) {
      handler(this, new PropertyChangedEventArgs(name));
    }
  }
}

确保使用您要更新的属性的名称触发PropertyChanged事件非常重要。

答案 1 :(得分:0)

尝试添加到绑定模式=“OneWay”,我不确定什么是默认