我目前正在使用MVVM模式进行编程。
我的观点模型看起来像这样
class DoorsViewModel
{
ObservableCollection<Door> doorCollection;
};
门类如下所示
class Door
{
string name;
bool isOpen;
};
我的视图链接到viewmodel,只包含一个带有图片和门名称的longlistselector。我希望图片是动态的,并根据门的状态(无论是打开还是关闭)而改变。我将如何实现它,以便图片根据门的状态动态更新?应该在viewmodel中完成吗?还是应该在视图中完成?
答案 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以了解如何为您的图片撰写图片。