【发布时间】:2013-10-05 14:59:54
【问题描述】:
我的 WPF 应用程序中有一个属性,我试图将其绑定到 UI。当我直接在视图模型中更新属性时,它会按预期工作。但是,当我尝试使用事件从另一个类中更新此属性时,绑定似乎不起作用。经过仔细检查,我认为这是因为 PropertyChangedEventHandler 在发生这种情况时为空。
我在 ViewModel 中的属性:
public int BeatNumber
{
get
{
return beatNumber;
}
set
{
if (beatNumber != value)
{
this.beatNumber = value;
RaisePropertyChanged(() => BeatNumber);
}
}
}
ViewModel 中的事件:
public event EventHandler GetHtmlDone = delegate { };
public void GetHTML(string url)
{
BeatNumber++;
}
通知对象:
public class NotificationObject : INotifyPropertyChanged
{
protected void RaisePropertyChanged<T>(Expression<Func<T>> action)
{
var propertyName = GetPropertyName(action);
RaisePropertyChanged(propertyName);
}
private static string GetPropertyName<T>(Expression<Func<T>> action)
{
var expression = (MemberExpression)action.Body;
var propertyName = expression.Member.Name;
return propertyName;
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
当我的事件被另一个类调用时,如何更新此绑定?
【问题讨论】:
-
您的 PropertyChangedEventHandler 为 null,这表明您的 VM 未绑定到 UI,即在您引发事件以更改其中的属性时,它尚未设置为 UI 的 DataContext
-
有什么方法可以确保在执行任何代码之前绑定 ViewModel 吗? IE。确保构造函数中的绑定?
-
是的,您将 VM 设置为 datacontext 以在其构造函数中查看...