1 按照《prism项目搭建》来搭建prism项目
2 在项目中添加ViewModels文件夹,在其下面添加类
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Prism.Command.ViewModels
{
public class MainWindowViewModel:BindableBase
{
private string _Title="Hello";
public string Title
{
get { return _Title; }
set { SetProperty(ref _Title, value); }
}
private bool _IsEnabled;
public bool IsEnabled
{
get { return _IsEnabled; }
set {
SetProperty(ref _IsEnabled, value);
//当命令实例化没有加Observes方法时候,必须要这个,如果有添加Observes方法时候,可以去掉这个
//ExecuteDelegateCommand.RaiseCanExecuteChanged();
}
}
private string _updateText;
public string UpdateText
{
get { return _updateText; }
set { SetProperty(ref _updateText, value); }
}
public DelegateCommand ExecuteDelegateCommand { get; }
public DelegateCommand DelegateCommandObservesProperty { get; }
public DelegateCommand DelegateCommandObservesCanExecute { get; }
public DelegateCommand<string> ExecuteGenericDelegateCommand { get; }
public MainWindowViewModel()
{
ExecuteDelegateCommand = new DelegateCommand(Execute, CanExecute);
DelegateCommandObservesProperty = new DelegateCommand(Execute, CanExecute).ObservesProperty(() => IsEnabled);
DelegateCommandObservesCanExecute = new DelegateCommand(Execute).ObservesCanExecute(() => IsEnabled);
ExecuteGenericDelegateCommand = new DelegateCommand<string>(ExecuteGeneric).ObservesCanExecute(() => IsEnabled);
}
private void ExecuteGeneric(string obj)
{
UpdateText = obj;
}
private bool CanExecute()
{
return IsEnabled;
}
private void Execute()
{
UpdateText = $"Updated:{DateTime.Now.ToString()}";
}
}
}
3 修改MainWindow.xaml
<Window x:Class="Prism.Command.Views.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:Prism.Command"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
Title="{Binding Title}" Height="450" Width="800">
<StackPanel>
<CheckBox Content="Enable Command" IsChecked="{Binding IsEnabled}" Margin="10"/>
<Button Content="DelegateCommand" Command="{Binding ExecuteDelegateCommand}" Margin="10"/>
<Button Content="DelegateCommand ObserveProperty" Command="{Binding DelegateCommandObservesProperty}" Margin="10"/>
<Button Content="DelegateCommand ObserveCanExecute" Command="{Binding DelegateCommandObservesCanExecute}" Margin="10"/>
<Button Content="DelegateCommand Generic" Command="{Binding ExecuteGenericDelegateCommand}" CommandParameter="Pass Parameter" Margin="10"/>
<TextBlock Text="{Binding UpdateText}" Margin="10" FontSize="30"/>
</StackPanel>
</Window>