如何用WPF实现一个最简单的Mvvm示例

 我来答
戏迷曲212
2017-07-24
知道答主
回答量:19
采纳率:0%
帮助的人:13.8万
展开全部
基类NotificationObject
class NotificationObject:INotifyPropertyChanged //ViewModel的基类,作用是通知ViewModels的变化
    {
       public event PropertyChangedEventHandler PropertyChanged;
       public void RaisePropertyChanged(string propertyName)
        {
           if (this.PropertyChanged!=null)
            {
                this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
简单基类DelegateCommand 
class DelegateCommand:ICommand
{
    public boolCanExecute(object parameter)
    {
        if (this.CanExecuteFunc==null)
        {
            return true;
        }
       return this.CanExecuteFunc(parameter);
    }
    public event EventHandler CanExecuteChanged;
    public void Execute(object parameter)
    {
        if (this.ExecuteAction==null)
        {
            return;
        }
        this.ExecuteAction(parameter);
    }
    public Action<object>
ExecuteAction { get; set; }
    public Func<object,bool> CanExecuteFunc { get; set; }  
}
ViewModel
class MainWindowViewModel : NotificationObject
    {
        //以下3个属性是用来做数据传输的数据属性  
       private double input1;
       public double Input1
        {
           get { returninput1; }
           set
            {
                input1 = value;
                this.RaisePropertyChanged("Input1");
            }
        }
       private double input2;
       public double Input2
        {
           get { returninput2; }
           set
            {
                input2 = value;
                this.RaisePropertyChanged("Input2");
            }
        }
       private double result;
       public double Result
        {
           get { returnresult; }
           set
            {
                result = value;
                this.RaisePropertyChanged("Result");
            }
        }
        //下面这个属性就是用来做操作传输的命令属性      
       public DelegateCommand AddCommand { get; set; }
       private void Add(objectparameter)
        {
           string s = System.IO.Directory.GetCurrentDirectory();
           string s1 = Environment.CurrentDirectory;
           MessageBox.Show(s+"\r\n"+s1);
        }       
 
        //在构造函数中关联命令属性 
       public MainWindowViewModel()
        {            
this.AddCommand = new DelegateCommand<object>(new Action<object>(Add));
        }
//命令属性也可以用以下方式
public DelegateCommand command1 { get { return new DelegateCommand(new Action(() => MessageBox.Show("a")));
} }
 
    }
View
在view里,可以在后台绑定如
this.DataContext = new MainWindowViewModel();
也可以在XAML里绑定
 
xmlns:viewmodel="clr-namespace:SimpleMvvmDemo.ViewModels"
<Window.Resources>
    <viewmodel:MainWindowViewModel x:Key="viewmodel"/>
</Window.Resources>
<GridDataContext="{StaticResource viewmodel}">
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式