<Window x:Class="WpfApp1.WindowCommand"
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:WpfApp1"
mc:Ignorable="d"
Title="WindowCommand" Height="450" Width="800">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="120,217,0,0" VerticalAlignment="Top" Command="{Binding MyComand}"/>
<TextBox HorizontalAlignment="Left" Margin="120,190,0,0" Text="{Binding StrName}" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
namespace WpfApp1
{
public class MyComand : ICommand
{
private Action showAction;
public MyComand(Action action)
{
this.showAction = action;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
showAction();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows;
namespace WpfApp1
{
public class MainViewModel:INotifyPropertyChanged
{
private string strName;
public string StrName
{
get { return strName; }
set
{
this.strName = value;
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("StrName"));
}
}
public MyComand MyComand { get; set; }
public MainViewModel()
{
this.StrName = "Hello Word";
this.MyComand = new MyComand(ShowMsg);
}
public event PropertyChangedEventHandler PropertyChanged;
public void ShowMsg()
{
this.StrName = "弹出消息示例";
MessageBox.Show("弹出消息");
}
}
}
ICommand 命令主要和按钮作用相关
INotifyPropertyChanged 主要用于消息通知,更新界面数据
扩展
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName="")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}