动态的VIew?在哪里放逻辑?

时间:2013-04-06 03:17:02

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

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

我的观点模型看起来像这样

class DoorsViewModel
{
ObservableCollection<Door> doorCollection;
};

门类如下所示

class Door
{
string name;
bool isOpen;
};

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

1 个答案:

答案 0 :(得分:2)

此逻辑应位于ViewModel中。与视图相关的所有逻辑或事物的显示方式都应该在ViewModel中。视图中没有逻辑(.xaml.cs)。

您通常使用INotifyPropertyChanged界面通知View某些内容已发生变化。在这种情况下,您希望在门的状态发生变化时更改门图像。在这种情况下,我会尝试这样的事情。

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以了解如何为您的图片撰写图片。