Silverlight RIA任务:简单双向视图模型通信示例

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)。

在主页面视图中,从对象和时间线窗口中选择子视图。选择属性下的高级选项,选择数据绑定...选择子视图模型。接下来,在主页面视图中添加控件。然后绑定属性、集合和命令。例如,可以在添加按钮上放置一个行为,并轻松绑定到子视图模型中的命令。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485