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

标签: c# wpf mvvm


【解决方案1】:

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

更多信息请参见ICommand interface

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2012-12-25
    • 2011-04-05
    • 2012-02-15
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多