更新对象后刷新WPF数据绑定

3

我在一个连接到视图的Presenter中有一个对象。在我的XAMTL中,我有以下内容:

<Label Content="{Binding ElementName=PSV, Path=Presenter.Portfolio.Name}"/>

现在当控件被创建时,Portfolio是null,然后我运行另一个方法来设置Portfolio。我已经实现了INotifyPropertyChanged,但到目前为止,我还没有能够触发绑定。有人可以给我一些提示吗?我可以绑定到属性的属性吗?
4个回答

2

绑定始终使用DataContext,您需要将Presenter设置为本地的DataContext。例如,您可以在Window或UserControl的构造函数中执行此操作:

this.DataContext = new Presenter();

您的绑定将会更改为:

<Label Content="{Binding ElementName=PSV, Path=Portfolio.Name}"/>

您以前路径中的Presenter部分在DataContext中是隐含的。

这样,DataContext会监视NotifyChanged事件,并在Portfolio从null更改为具有值时正确更新视图。

回答您问题的最后一部分,绑定到属性的属性确实可行。



0

如果您已经正确实现了INotifyPropertyChanged,那么这将完美地工作。一些尝试的方法:

  1. 尝试在您的Presenter构造函数中设置一个虚拟组合和虚拟名称,以便您可以确保绑定实际上是正确的。
  2. 如果在第1步之后仍然无法正常工作,请查看输出窗口是否有任何绑定错误。
  3. 如果在第1步之后它能够正常工作,请确保您正在设置的投资组合在构建时具有名称。如果没有,您的投资组合类还需要实现INotifyPropertyChanged并在设置Name时引发事件。

如果所有尝试都失败了,请发布您的代码。


0

既然你已经实现了INotifyPropertyChanged,那么你是否确保在Portfolio.Name的setter中触发了PropertyChanged事件呢?

string _name;
public string Name
{
get 
{
   return _name;
}
set
{
   _name = value;
   // Alert the databinding engine about changes to the source value
   OnPropertyChanged("Name");
}

void OnPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
      PropertyChanged(propertyName);
}

#region INotifyPropertyChanged members
public event PropertyChangedEventHandler PropertyChanged;
#endregion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接