如何处理视图模型属性的绑定内部数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理视图模型属性的绑定内部数据?相关的知识,希望对你有一定的参考价值。

假设我有一个这样的视图模型:

public class AddItemViewModel : BaseViewModel //MVVMLight
 {
    ImageData _image1;
    public ImageData Image1
    {
        get { return _image1; }
        set { Set(ref _image1, value); }
    }
 }

并且ImageData有一个属性IsDefault,我需要绑定(双向绑定)到复选框控件的IsChecked属性..什么是MVVM解决方案?是否需要通过继承ImageDataBaseViewModel模型转换为视图模型?

目前我正在添加一个新属性来处理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事件,以便它可以禁用所有发件人兄弟姐妹的复选框。

以上是关于如何处理视图模型属性的绑定内部数据?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 如何处理对空对象属性的绑定?

KnockoutJS:我应该如何处理繁重的小部件初始化代码?

在片段之间切换时如何处理相机?

如何处理 iOS 应用程序中的模型类

如何处理局部视图中的模型

如何处理淘汰视图模型中的多对多关系