2013-04-06 98 views
0

我目前正在使用MVVM模式进行编程。动态视图?在哪里放逻辑?

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

class DoorsViewModel 
{ 
ObservableCollection<Door> doorCollection; 
}; 

大门类看起来像下面

class Door 
{ 
string name; 
bool isOpen; 
}; 

我的看法是链接到视图模型,并简单地包含图片和名称的longlistselector的门。我希望图片是动态的,并根据门的状态(无论是打开还是关闭)进行更改。我将如何实现它,以便根据门的状态动态更新图片?这应该在视图模型中完成吗?还是应该在视图内完成?

回答

2

这个逻辑应该在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以了解如何为图片编写图片。