【问题标题】:How to handle binding inner data of the view models' properties?如何处理视图模型属性的绑定内部数据?
【发布时间】:2019-05-25 19:33:50
【问题描述】:

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

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

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

目前我正在为所有 4 张图片在 AddItemViewModel 中添加一个新属性来处理此问题:

    private bool _isDefault;
    public bool IsDefault
    {
        get { return _isDefault; }
        set { Set(ref _isDefault, value); }
    }

但这看起来很笨拙!

【问题讨论】:

    标签: c# xamarin mvvm mvvm-light


    【解决方案1】:

    通常的解决方案是为 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 事件,以便它可以禁用所有发送者兄弟姐妹上的复选框。

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多