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

时间:2009-01-18 16:10:14

标签: c# wpf data-binding xaml

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

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

现在,当创建控件时,Portfolio为null,然后我运行另一个设置Portfolio的方法。我已经实现了INotifyPropertyChanged,但到目前为止,我还没有能够触发绑定到绑定。

有人可以给我提示吗?我可以绑定到属性的属性吗?

4 个答案:

答案 0 :(得分:2)

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

this.DataContext = new Presenter();

然后您的绑定将更改为:

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

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

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

在回答问题的最后部分时,绑定到属性的属性确实有效。

答案 1 :(得分:1)

答案 2 :(得分:0)

如果您已正确实施INotifyPropertyChanged,则可以正常使用。有些事要尝试:

  1. 尝试在演示者的构造函数中设置具有虚拟名称的虚拟投资组合,以便确保绑定实际上是正确的。
  2. 如果在#1之后仍然无效,请在输出窗口中查找任何绑定错误。
  3. 如果在#1之后确实有效,请确保您设置的投资组合在构建时具有名称。如果没有,您的投资组合类还需要实施INotifyPropertyChanged并在Name设置时提升事件。
  4. 如果不这样做,请发布您的代码。

答案 3 :(得分: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