2009-01-18 113 views
3

我在连接到视图的演示者中有一个对象。在我的XAMTL我有以下几点:更新对象后刷新wpf数据绑定

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

现在,当创建控制,投资组合为空,然后我运行这台组合的另一种方法。我已经实现了INotifyPropertyChanged,但到目前为止,我还没有能够触发连接到绑定。

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

回答

2

绑定始终与DataContext一起使用,您需要将Presenter设置到本地DataContext中。例如,你可以在你的窗口或用户控件的构造函数中做到这一点:

this.DataContext = new Presenter(); 

你的绑定,然后将改变为:

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

你的前路的演示部分是DataContext的暗示。

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

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

0

如果您正确实施INotifyPropertyChanged,这会工作得很好。有些事情可以尝试:

  1. 尝试在演示者的构造函数中使用虚拟名称设置虚拟投资组合,以确保绑定实际上是正确的。
  2. 如果它在#1之后仍然不起作用,请在输出窗口中查找任何绑定错误。
  3. 如果它在#1之后确实有效,请确保您设置的投资组合在创建时有名称。如果没有,您的投资组合课程还需要实施INotifyPropertyChanged,并在设置Name时提高事件。

如果没有这些,请发布您的代码。

0

由于您已经实现了INotifyPropertyChanged,您是否确保在您的Portfolio.Name设置器中触发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