2013-10-05 19 views
1

我在我的WPF应用程序中有一个属性,我试图绑定到UI。当我直接在viewmodel内更新属性时,它就像我期望的那样工作。但是,当我尝试使用事件从另一个类中更新此属性时,绑定似乎不起作用。在仔细观察下,我认为这是因为PropertyChangedEventHandler在发生这种情况时为空。从Event更新Viewmodel - PropertyChangedEventHandler为空?

我的视图模型内部属性:

public int BeatNumber 
     { 
      get 
      { 
       return beatNumber; 
      } 
      set 
      { 
       if (beatNumber != value) 
       { 
        this.beatNumber = value; 
        RaisePropertyChanged(() => BeatNumber); 
       } 
      } 
     } 

事件内视图模型:

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; 
    } 

我如何得到这个绑定更新时,我的事件从另一个班叫?

+0

您PropertyChangedEventHandler为空它告诉也就是说,它没有被设置为按时间UI的的DataContext你提到的事件改变中的属性你的虚拟机未绑定到UI它 – Nitin

+0

有没有什么办法可以确保ViewModel在执行任何代码之前被绑定?即。确保在构造函数中的绑定? – user547794

+0

是的,您将虚拟机设置为datacontext在其构造函数中查看... – Nitin

回答

0

通过使用Commands来解决它,而不是从Events中调用方法。

有关更多信息,请参见ICommand interface