MVVM Light - RaisePropertyChanged无效

时间:2014-06-13 15:05:43

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

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

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

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

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

我的问题是,当我在Loadedd或NavigatedTo事件上调用此命令时,没有任何反应。然后我添加了一个按钮来调用此命令(用于调试目的),并且页面已成功更新。

我做错了什么?

1 个答案:

答案 0 :(得分: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,然后它变得更加容易,你的ViewModel继承自ViewModelBase并使你的属性像这样:

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