当对象改变我的观点时不在 wpf

Posted

技术标签:

【中文标题】当对象改变我的观点时不在 wpf【英文标题】:When object changed my view don't in wpf 【发布时间】:2014-01-11 16:59:36 【问题描述】:

好的,所以我的代码隐藏中有属性public Person ActualPerson get; set; 。我这样设置DataContextthis.DataContext = this;

在 XAML 中,我在 StackPanel 中绑定了 DataContext,如下所示:DataContext="Binding ActualPerson,UpdateSourceTrigger=PropertyChanged"。而在每个TextBlock:Text="Binding Path=Name,UpdateSourceTrigger=PropertyChanged"

我的问题是,当我启动我的应用程序时,我的对象具有属性,并且所有 TextBlocks 都填充了数据,但是当 Person 类对象更改时,视图没有刷新值。我的 Person 类实现 INotifyPropertyChanged。我做错了什么?我的 UserControll 类是否应该实现 INotifyPropertyChanged 而不是 Person 类?

【问题讨论】:

【参考方案1】:

您的问题是您实际上并未为 ActualPerson 对象调用 PropertyChanged,因此不会更新 DataContext 上的绑定。

public Person ActualPerson

    get  return this.actualPerson; 
    set
    
        if (this.actualPerson == value)
            return;

        this.actualPerson = value;
        this.OnPropertyChanged("ActualPerson");
    


public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)

    if (this.PropertyChanged != null)
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

编辑:

查看您的 ViewModel 和代码隐藏以了解您如何处理此问题会有所帮助。例如,如果您要设置在 UserControl 上定义的 ActualPerson 对象,则最好使用 DependencyProperty

public static readonly DependencyProperty ActualPersonProperty = DependencyProperty.Register(
    "ActualPerson", typeof (Person), typeof (MyUserControl), new PropertyMetadata(default(Person)));

public Person ActualPerson

    get  return (Person) GetValue(ActualPersonProperty); 
    set  SetValue(ActualPersonProperty, value); 

【讨论】:

还要记得指定INotifyPropertyChanged接口。 好的,但是我的 Person 类实现了 INotifyPropertyChanged。所以我的代码隐藏类应该实现那个接口? 嗯,您的绑定需要以某种方式通知更改。我不会在您的代码隐藏中使用INotifyPropertyChanged,而是使用我在编辑中添加的建议,即使用DependencyProperty @ext 带有DependencyProperty 的选项有效,但如何?我想知道,INotifyPropertyChanged 应该在我的模型类(Person 类)中实现吗?还是 Window / UserControl 类? INotifyPropertyChanged 应该在绑定中使用的任何类上实现,无论是 WPF 绑定还是在您希望它知道每一行的属性更改的网格之类的控件中。为了能够使用 DependencyProperty,您需要使用派生自 DependencyObject 的类,这排除了除代码隐藏之外的大多数类。你可能想看看this SO question

以上是关于当对象改变我的观点时不在 wpf的主要内容,如果未能解决你的问题,请参考以下文章

Java MVC:保持我的观点更新

我在寻找啥样的观点?

ASP NET MVC 包含双重我的观点

WPF使用Log4net.dll库的demo(转载加个人观点)

当我创建我的类的对象实例时会发生啥

改变观点 - Sencha