上一篇介绍了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结构的大概介绍

 

posted on 2010-03-15 00:37  yo  阅读(904)  评论(0编辑  收藏  举报