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 @ 2021-08-17 19:03  double64  阅读(1361)  评论(0)    收藏  举报