在Silverlight应用程序开发中,"视图模型风格"编程是一种流行的模式,它允许开发者创建没有用户界面的应用程序。开发者只需要创建视图模型(ViewModel)和模型(Model),然后设计师可以在Microsoft Expression Blend中从空白页面开始,完全创建用户界面(View)。本文将介绍一种简单的方法,用于在视图模型之间进行通信。
首先,将创建一个Silverlight应用程序作为子应用程序。使用以下代码来定义视图模型:
public class ChildVMModel : INotifyPropertyChanged {
public ChildVMModel() {
AddNewNameCommand = new DelegateCommand(AddNewName, CanAddNewName);
DeleteNameCommand = new DelegateCommand(DeleteName, CanDeleteName);
}
// AddNewNameCommand 相关代码
public ICommand AddNewNameCommand { get; set; }
public void AddNewName(object param) {
string strName = (String)param;
colNames.Add(strName);
NumberOfNames = colNames.Count;
}
private bool CanAddNewName(object param) {
return true;
}
// DeleteNameCommand 相关代码
public ICommand DeleteNameCommand { get; set; }
public void DeleteName(object param) {
string strName = (String)param;
colNames.Remove(strName);
NumberOfNames = colNames.Count;
}
private bool CanDeleteName(object param) {
return true;
}
// 属性定义
private int _NumberOfNames = 0;
public int NumberOfNames {
get {
return _NumberOfNames;
}
private set {
if (NumberOfNames == value) {
return;
}
_NumberOfNames = value;
this.NotifyPropertyChanged("NumberOfNames");
}
}
// 集合定义
private ObservableCollection _colNames = new ObservableCollection();
public ObservableCollection colNames {
get {
return _colNames;
}
private set {
if (colNames == value) {
return;
}
_colNames = value;
this.NotifyPropertyChanged("colNames");
}
}
// INotifyPropertyChanged 接口实现
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
接下来,创建视图并绑定视图模型的属性、集合和命令到视图。然后创建一个主页面视图(MainPage View),它有自己的视图模型。在项目资源中,获取视图并将其放置在页面上。可以向列表中添加和删除项目,并且项目的数量也会显示出来。
如果想要从主页面视图(MainPage View)与子视图进行通信,可以使用以下方法。首先,在主页面视图模型中添加以下代码:
private ChildVMModel _objChildVMModel = new ChildVMModel();
public ChildVMModel objChildVMModel {
get {
return _objChildVMModel;
}
private set {
if (objChildVMModel == value) {
return;
}
_objChildVMModel = value;
this.NotifyPropertyChanged("objChildVMModel");
}
}
这提供了一个可以将子视图绑定到的属性。当构建项目并查看数据上下文时,会看到子视图模型(objChildVMModel)。
在主页面视图中,从对象和时间线窗口中选择子视图。选择属性下的高级选项,选择数据绑定...选择子视图模型。接下来,在主页面视图中添加控件。然后绑定属性、集合和命令。例如,可以在添加按钮上放置一个行为,并轻松绑定到子视图模型中的命令。