2

我有三个 ViewModel:- MainViewModel,- NavigatorViewModel,- ProjectViewModel。

在 MainViewModel 中,我有一个 ProjectViewModel 类型的名为 CurrentProject 的属性:

public ProjectViewModel CurrentProject
    {
        get
        {
            return _currentProject;
        }
        set
        {
            if (_currentProject == value)
            {
                return;
            }
            _currentProject = value;
            RaisePropertyChanged("CurrentProject");
        }
    }

在 NavigatorViewModel 我还有一个属性 CurrentProject

public ProjectViewModel CurrentProject { get { return ViewModelLocator.DesktopStatic.CurrentProject; } }

我使用 MVVM 灯。如果 MainViewModel 中的 CurrentProject 属性发生更改,View NavigatorView 不会收到通知。

如何让 NavigatorView 知道该属性已更改?

4

1 回答 1

0

作为设计考虑,我建议不要为此使用静态单例模式。您可以使用Messenger该类发送消息。

但是,要解决您当前的问题,您需要响应PropertyChanged该属性的 Singleton 上的事件:

public class NavigatorViewModel : INotifyPropertyChanged
{
    public NavigatorViewModel()
    {
        // Respond to the Singlton PropertyChanged events
        ViewModelLocator.DesktopStatic.PropertyChanged += OnDesktopStaticPropertyChanged;
    }

    private void OnDesktopStaticPropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        // Check which property changed
        if (args.PropertyName == "CurrentProject")
        {
            // Assuming NavigatorViewModel also has this method
            RaisePropertyChanged("CurrentProject");
        }
    }
}

此解决方案侦听 Singleton 属性的更改并将更改传播到NavigatorViewModel.

警告:NavigatorViewModel您需要在某处取消事件挂钩,否则您将面临内存泄漏的风险。

ViewModelLocator.DesktopStatic.PropertyChanged -= OnDesktopStaticPropertyChanged;
于 2013-09-08T13:25:47.610 回答