从事件更新 Viewmodel - PropertyChangedEventHandler 为空?

Posted

技术标签:

【中文标题】从事件更新 Viewmodel - PropertyChangedEventHandler 为空?【英文标题】:Updating Viewmodel from Event - PropertyChangedEventHandler is null? 【发布时间】: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 以在其构造函数中查看... 【参考方案1】:

通过使用命令而不是从事件中调用方法来解决它。

更多信息请参见ICommand interface

【讨论】:

以上是关于从事件更新 Viewmodel - PropertyChangedEventHandler 为空?的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI:在 TextBox 中的 KeyPress 上强制更新 ViewModel

来自事件处理程序的 ReactiveUI MVVM 更新属性

从 View 到 ViewModel 的 WPF 事件绑定?

WPF MVVM 从 ViewModel 触发事件的正确方法

如何从后台服务更新 ViewModel 的 LiveData 并更新 UI

将事件绑定到 ViewModel