1. 目录结构
2. 代码
2.1 DelegateCommand.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;namespace MVVSSample.Commands
{class DelegateCommand : ICommand{public event EventHandler CanExecuteChanged;public bool CanExecute(object parameter){if (this.CanExcuteFunc == null){return true;}return this.CanExcuteFunc(parameter);}public void Execute(object parameter){if(this.ExcuteAction == null){return;}this.ExcuteAction(parameter);}public Action<object> ExcuteAction{ get; set;}public Func<object, bool> CanExcuteFunc { get; set; }}
}
2.2 MainWindowViewModel.cs
using Microsoft.Win32;
using MVVSSample.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MVVSSample.ViewModels
{class MainWindowViewModel : NotificationObject{private double input1;public double Input1{get { return input1; }set{input1 = value;this.RaisePropertyChanged("Input1");}}private double input2;public double Input2{get { return input2; }set{input2 = value;this.RaisePropertyChanged("Input2");}}private double result;public double Result{get { return result; }set{result = value;this.RaisePropertyChanged("Result");}}public DelegateCommand AddCommand { get; set; }public DelegateCommand SaveCommand { get; set; }private void Add(object parameter){this.Result = this.Input1 + this.Input2;}private void Save(object parameter){SaveFileDialog dlg = new SaveFileDialog();dlg.ShowDialog();}public MainWindowViewModel(){this.AddCommand = new DelegateCommand();this.AddCommand.ExcuteAction = new Action<object>(this.Add);this.SaveCommand = new DelegateCommand();this.SaveCommand.ExcuteAction = new Action<object>(this.Save);}}
}
2.3 NotificationObject.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MVVSSample.ViewModels
{class NotificationObject : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;public void RaisePropertyChanged(string propertyName){if(this.PropertyChanged != null){this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));}}}
}
2.4 App.xaml
<Application x:Class="MVVSSample.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:MVVSSample"StartupUri="MainWindow.xaml"><Application.Resources></Application.Resources>
</Application>
2.5 MainWindow.xaml
<Window x:Class="MVVSSample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:MVVSSample"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><!--界面1--><!--<Grid><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="*"/></Grid.RowDefinitions><Menu><MenuItem Header="_File"><MenuItem Header="_Save" Command="{Binding SaveCommand}" /></MenuItem></Menu><Grid Grid.Row="1"><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /><RowDefinition Height="*" /></Grid.RowDefinitions><Slider x:Name="slider1" Grid.Row="0" Background="LightBlue" Minimum="-100" Maximum="100" Margin="4" Value="{Binding Input1}" /><Slider x:Name="slider2" Grid.Row="1" Background="LightBlue" Minimum="-100" Maximum="100" Margin="4" Value="{Binding Input2}" /><Slider x:Name="slider3" Grid.Row="2" Background="LightBlue" Minimum="-100" Maximum="100" Margin="4" Value="{Binding Result}" /><Button x:Name="addButton" Grid.Row="3" Content="Add" Width="120" Height="80" Command="{Binding AddCommand}" /></Grid></Grid>--><!--界面2--><Grid><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="*" /></Grid.RowDefinitions><Button Content="Save" Command="{Binding SaveCommand}" /><Grid Grid.Row="1"><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /><RowDefinition Height="*" /></Grid.RowDefinitions><TextBox x:Name="tb1" Grid.Row="0" Background="LightBlue" FontSize="24" Margin="4" Text="{Binding Input1}"/><TextBox x:Name="tb2" Grid.Row="1" Background="LightBlue" FontSize="24" Margin="4" Text="{Binding Input2}"/><TextBox x:Name="tb3" Grid.Row="2" Background="LightBlue" FontSize="24" Margin="4" Text="{Binding Result}" /><Button x:Name="addButton" Grid.Row="3" Content="Add" Width="120" Height="80" Command="{Binding AddCommand}"/></Grid></Grid></Window>
2.6 MainWindow.xaml.cs
using MVVSSample.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace MVVSSample
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new MainWindowViewModel();}}
}
3. 界面效果
3.1 效果1
3.2 效果2
4. 参考