WPF 命令传参多个按钮绑定同一个命令执行不同的操作

▲ 以对象的形式硬编码传参。

▲ 不同按钮绑定同一个命令,执行不同的操作。

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
}



posted @   double64  阅读(1304)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示