您的位置:首页 > 其它

SilverLight框架初探-ViewModel

2010-03-15 00:37 239 查看
上一篇介绍了MVVM架构的总体架构,下面介绍一下里面ViewModel与RiaService的实现过程

1.ViewModel,定义与View相对应的属性与操作,如下:



ViewModelBase.cs,这里继承自INotifyPropertyChanged,这样,当与之所绑定的View发生变化时,就能触发ViewModel相对应的属性或方法。代码如下:

public class ViewModelBase:INotifyPropertyChanged
{

protected void OnNotifyPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}

public bool IsDesignTime
{
get
{
return (Application.Current == null) || (Application.Current.GetType() == typeof(Application));
}
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

#endregion
}

ProductionViewModel.cs,与View相对应的ViewModel,继承自ViewModelBase,代码如下:

public class ProductionViewModel:ViewModelBase
{
private IEnumerable<ProductionDataDto> _listProduction; //查询结果
private string _searchText;               //查询条件
private ICommand _queryCommand;          //查询命令

public ICommand QueryCommand
{
get { return _queryCommand; }
}
public string SearchText
{

get { return _searchText; }
set
{
_searchText = value;
OnNotifyPropertyChanged("SearchText");
}
}

public IEnumerable<ProductionDataDto> ListProduction
{
get { return _listProduction; }
set
{
_listProduction = value;
OnNotifyPropertyChanged("ListProduction");
}
}

TestDomainContext service = null;
public ProductionViewModel()
{
_queryCommand = new QueryCommand(this);
_queryCommand.Execute(null);
}

public void QueryData()
{
service = new YOCTestDomainContext();

_listProduction = service.Load(service.GetProductionDataQuery()).Entities;

}
}

这里,我们定义了一个ICommand命令,主要用于处理ViewModel中涉及到行为,代码如下:

public partial class QueryCommand:ICommand
{
private ProductionViewModel _productionViewModel;
private string _searchText;
public QueryCommand(ProductionViewModel productionViewModel,string searchText)
{
_productionViewModel = productionViewModel;
_searchText = searchText;
}
public QueryCommand(ProductionViewModel productionViewModel)
{
_productionViewModel = productionViewModel;
}

public bool CanExecute(object parameter)
{
return true;
}

public event EventHandler CanExecuteChanged
{
add { }
remove { }
}
public void Execute(object parameter)
{
this._productionViewModel.QueryData();
}
}

上面就是对于ViewModel结构的大概介绍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: