如何处理视图模型属性的绑定内部数据?
How to handle binding inner data of the view models' properties?
假设我有这样的视图模型:
public class AddItemViewModel : BaseViewModel //MVVMLight
{
ImageData _image1;
public ImageData Image1
{
get { return _image1; }
set { Set(ref _image1, value); }
}
}
并且 ImageData
有一个 属性 IsDefault
我需要将其绑定(双向绑定)到复选框控件的 IsChecked
属性 .. 什么是 MVVM 解决方案? ImageData
模型是否需要通过继承自 BaseViewModel
转换为视图模型?
目前我正在添加一个新的 属性 来处理 AddItemViewModel
中的所有 4 张图像:
private bool _isDefault;
public bool IsDefault
{
get { return _isDefault; }
set { Set(ref _isDefault, value); }
}
但这看起来很笨拙!
通常的解决方案是为 ImageData (ImageDataViewModel
) 创建一个视图模型并将您的 IsDefault
属性 放在那里:
public class ImageDataViewModel : ViewModelBase
{
public EventHandler<bool> OnChanging;
public ImageData Data { get; private set; }
public ImageDataViewModel(ImageData data)
{
this.Data = data;
}
private bool _isDefault;
public bool IsDefault
{
get { return _isDefault; }
set
{
if (value != this._isDefault)
OnChanging?.Invoke(this, value);
Set(ref _isDefault, value);
}
}
}
然后,当父视图模型创建这些子视图模型时,它会订阅 OnChanging
事件,以便它可以禁用所有发送者的兄弟姐妹的复选框。
假设我有这样的视图模型:
public class AddItemViewModel : BaseViewModel //MVVMLight
{
ImageData _image1;
public ImageData Image1
{
get { return _image1; }
set { Set(ref _image1, value); }
}
}
并且 ImageData
有一个 属性 IsDefault
我需要将其绑定(双向绑定)到复选框控件的 IsChecked
属性 .. 什么是 MVVM 解决方案? ImageData
模型是否需要通过继承自 BaseViewModel
转换为视图模型?
目前我正在添加一个新的 属性 来处理 AddItemViewModel
中的所有 4 张图像:
private bool _isDefault;
public bool IsDefault
{
get { return _isDefault; }
set { Set(ref _isDefault, value); }
}
但这看起来很笨拙!
通常的解决方案是为 ImageData (ImageDataViewModel
) 创建一个视图模型并将您的 IsDefault
属性 放在那里:
public class ImageDataViewModel : ViewModelBase
{
public EventHandler<bool> OnChanging;
public ImageData Data { get; private set; }
public ImageDataViewModel(ImageData data)
{
this.Data = data;
}
private bool _isDefault;
public bool IsDefault
{
get { return _isDefault; }
set
{
if (value != this._isDefault)
OnChanging?.Invoke(this, value);
Set(ref _isDefault, value);
}
}
}
然后,当父视图模型创建这些子视图模型时,它会订阅 OnChanging
事件,以便它可以禁用所有发送者的兄弟姐妹的复选框。