▲ 以对象的形式硬编码传参。
▲ 不同按钮绑定同一个命令,执行不同的操作。
XAML:
<Window.DataContext>
<local:MainVM/>
</Window.DataContext>
<Grid>
<StackPanel Margin="15">
<TextBlock Text="传递对象参数" FontWeight="Bold" FontSize="12" Margin="0,5,0,5" ></TextBlock>
<DockPanel>
<StackPanel DockPanel.Dock="Left" VerticalAlignment="Center">
<Button Command="{Binding PassArgObjCmd}" Content="传递多个参数" Height="23" HorizontalAlignment="Left" Width="100">
<Button.CommandParameter>
<local:UserParam UserName="悟空" UserPhone="110" UserAdd="花果山" UserSex="男" ></local:UserParam>
</Button.CommandParameter>
</Button>
<Button Content="吃香蕉" Command="{Binding EatWhatCommand}" Margin="0 10 0 0">
<Button.CommandParameter>
<local:Food>Banana</local:Food>
</Button.CommandParameter>
</Button>
<Button Content="吃桃子" Command="{Binding EatWhatCommand}" Margin="0 10 0 0">
<Button.CommandParameter>
<local:Food>Peach</local:Food>
</Button.CommandParameter>
</Button>
<Button Content="吃苹果" Command="{Binding EatWhatCommand}" Margin="0 10 0 0">
<Button.CommandParameter>
<local:Food>Apple</local:Food>
</Button.CommandParameter>
</Button>
</StackPanel>
<StackPanel DockPanel.Dock="Right" Margin="50 0 0 0" VerticalAlignment="Center" Orientation="Vertical">
<TextBlock Text="{Binding ObjParam.UserName,StringFormat='姓名:\{0\}'}" ></TextBlock>
<TextBlock Text="{Binding ObjParam.UserPhone,StringFormat='电话:\{0\}'}" ></TextBlock>
<TextBlock Text="{Binding ObjParam.UserAdd,StringFormat='地址:\{0\}'}" ></TextBlock>
<TextBlock Text="{Binding ObjParam.UserSex,StringFormat='性别:\{0\}'}" ></TextBlock>
</StackPanel>
</DockPanel>
</StackPanel>
</Grid>
枚举:
public enum Food
{
Banana,
Peach,
Apple,
}
Model:
public class UserParam
{
public String UserName { get; set; }
public String UserPhone { get; set; }
public String UserAdd { get; set; }
public String UserSex { get; set; }
}
ViewModel:
public class MainVM : ViewModelBase
{
#region 传递参数对象
private UserParam objParam;
public UserParam ObjParam
{
get { return objParam; }
set { objParam = value; RaisePropertyChanged(() => ObjParam); }
}
#endregion
#region 命令
private RelayCommand<UserParam> passArgObjCmd;
public RelayCommand<UserParam> PassArgObjCmd
{
get
{
if (passArgObjCmd == null)
passArgObjCmd = new RelayCommand<UserParam>((p) => ExecutePassArgObj(p));
return passArgObjCmd;
}
set { passArgObjCmd = value; }
}
private void ExecutePassArgObj(UserParam up)
{
ObjParam = up;
}
private RelayCommand<Food> _eatWhatCommand;
public RelayCommand<Food> EatWhatCommand
{
get
{
if (_eatWhatCommand == null)
_eatWhatCommand = new RelayCommand<Food>(Eat);
return _eatWhatCommand;
}
set
{
_eatWhatCommand = value;
}
}
private void Eat(Food food)
{
switch (food)
{
case Food.Banana:
MessageBox.Show("吃香蕉");
break;
case Food.Peach:
MessageBox.Show("吃桃子");
break;
case Food.Apple:
MessageBox.Show("吃苹果");
break;
}
}
#endregion
}