【问题标题】:MVVM Light - RaisePropertyChanged not workingMVVM Light - RaisePropertyChanged 不起作用
【发布时间】:2014-08-04 04:51:20
【问题描述】:

我有一个绑定到一个名为 SettingsView 的页面的 ViewModel。 在此页面中,我有一些类似这样的属性:

public string SettingsHeaderTitle { get { return AppResources.settings_header_title; } }

我有一个按钮可以导航到另一个页面,我们可以在其中更改语言,然后返回 SettingsPage。 我已经实现了这样的命令:

public void UpdateView() 
{
    RaisePropertyChanged(string.Empty);
}

我的问题是,当我从 Loadedd 或 NavigatedTo 事件调用此命令时,什么也没有发生。然后我添加了一个按钮来调用这个命令(用于调试目的)并且页面更新成功。

我做错了什么?

【问题讨论】:

  • 问题是视图中的数据没有传递给 ViewModel,真的吗?然后,查看是否: 类属性已实现 PropertyChanged。另外你绑定是正确的,你的模式=双向和UpdateSourceTrigger=PropertyChanged。

标签: c# mvvm windows-phone mvvm-light


【解决方案1】:

您需要像这样在 ViewModel 上实现 INotifyPropertyChanged

public class SelectionItem<T> : INotifyPropertyChanged
{
    private AppliesTo _appliesTo;
    public AppliesTo AppliesTo
    {
        get { return _appliesTo; }
        set
        {
            _appliesTo = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("AppliesTo"));
        }
    }
}

编辑:我刚刚注意到您正在使用 MVVM Light,然后它变得更加容易,在您的 ViewModels 中继承自 ViewModelBase 并使您的属性如下:

private bool _isComparisonRun;
public bool IsComparisonRun
{
    get { return _isComparisonRun; }
    set
    {
        if (_isComparisonRun == value) return;
        _isComparisonRun = value;
        RaisePropertyChanged(() => IsComparisonRun);
    }
}

【讨论】:

  • 实际上我的 ViewModel 实现了 ViewModelBase,我想一次更新 ViewModel 的所有属性,因为语言已经改变了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多