MVVM Light - 模型对象上的事件

MVVM Light - events on object of model

我有疑问如何在模型对象的实例上引发 viemodel 中的事件?

如果我直接在 viemodel 中声明变量就很容易了。只是 :

private bool _something;
        public bool something
        {
            get
            {
                return _something;
            }
            set
            {
                _something = value;
                //do something
                RaisePropertyChanged("something");
            }
        } 

但是如果在 viemodel 中我有:

private MyModelClass _projekcik;
        public MyModelClass Projekcik
        {
            get
            {
                return _projekcik;
            }
            set
            {
                _projekcik = value;
                RaisePropertyChanged("Projekcik");
            }
        }

其中 MyModelClass 在单独的文件中定义为:

 public class MyModelClass
    {
       int abc {get;set;}
       int other {get;set;}
    }

我想在更改 Projekcik.abc 的值时引发一个事件(从 viemodel 执行部分代码)?

例如 Projekcik.abc 和 Projekcik.other 是存储从两个组合框选择的值的变量。当用户更改第一个组合框中的选定对象时(当 Projekcik.abc 被更改时)我想将事件引发到第二个组合框的 refresh/reload 项

您最好的选择是在 MyModelClass 中实现 INotifyPropertyChanged,然后订阅 PropertyChanged 事件来执行您的逻辑。例如:

private MyModelClass _Projekcik;
public MyModelClass Projekcik
{
    get => _Projekcik;
    set
    {
        if(Equals(value, _Projekcik)) return;
        if(_Projekcik != null)
            _Projekcik.PropertyChanged -= HandlePropertyChanged;
        _Projekcik = value;
        if(_Projekcik != null)
            _Projekcik.PropertyChanged += HandlePropertyChanged;

        void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "abc")
            {
                //Do your stuff here
            }
        }
    }
}

我假设您知道如何正确实施 INotifyPropertyChanged