我在一个连接到视图的演示者中有一个对象。在我的XAMTL中,我有以下内容:
<Label Content="{Binding ElementName=PSV, Path=Presenter.Portfolio.Name}"/>
现在,当创建控件时,Portfolio为null,然后我运行另一个设置Portfolio的方法。我已经实现了INotifyPropertyChanged,但到目前为止,我还没有能够触发绑定到绑定。
有人可以给我提示吗?我可以绑定到属性的属性吗?
答案 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)
也许 http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression.aspx 和 http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression.updatetarget.aspx 帮助
答案 2 :(得分:0)
如果您已正确实施INotifyPropertyChanged
,则可以正常使用。有些事要尝试:
INotifyPropertyChanged
并在Name
设置时提升事件。如果不这样做,请发布您的代码。
答案 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