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
。
我有疑问如何在模型对象的实例上引发 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
。