【问题标题】:Dynamic VIew? where to put logic?动态视图?把逻辑放在哪里?
【发布时间】:2013-04-06 03:17:01
【问题描述】:

我目前正在使用 MVVM 模式进行编程。

我的视图模型看起来像这样

class DoorsViewModel
{
ObservableCollection<Door> doorCollection;
};

门类如下所示

class Door
{
string name;
bool isOpen;
};

我的视图链接到视图模型,并且只包含一个带有图片和门名称的 longlistselector。我希望图片是动态的,并根据门的状态(无论是打开还是关闭)而变化。我将如何实现它以使图片根据门的状态动态更新?这应该在视图模型中完成吗?还是应该在视图内完成?

【问题讨论】:

    标签: mvvm windows-phone-8 mvvm-light


    【解决方案1】:

    这个逻辑应该在 ViewModel 中。所有与视图相关的逻辑或事物的显示方式都应该在 ViewModel 中。视图中不应包含任何逻辑 (.xaml.cs)。

    您通常使用INotifyPropertyChanged 接口来通知视图发生了一些变化。在这种情况下,您希望在门状态更改时更改门图像。在这种情况下,我会尝试这样的事情。

    class Door: INotifyPropertyChanged
    {
        private string _name;
        private bool _isOpen;
    
        public Uri DoorImage
        {
            get
            {
                if (_isOpen) return new Uri("uri_to_open.png");
                return new Uri("uri_to_closed.png");
            }
        }
    
        public bool IsOpen
        {
            get { return _isOpen; }
            set
            {
                _isOpen = value;
                RaisePropertyChanged("IsOpen");
                // important, notifies the UI to update the door image
                RaisePropertyChanged("DoorImage");
            }
        }
    
        private void RaisePropertyChanged(string propertyName)
        {
            var tmp = PropertyChanged;
            if (tmp != null) tmp(this, new PropertyChangedEventArgs(propertyName));
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    };
    

    注意:我已将字段封装到属性中。

    如果您的图片嵌入到您的程序集中,请查看此link 了解如何为您的图片编写 uri。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2014-03-03
      • 1970-01-01
      • 2014-03-16
      • 2017-04-19
      相关资源
      最近更新 更多