通过CommandParameter将2个硬编码值传递给命令

时间:2018-08-23 14:42:26

标签: wpf prism

我正在尝试通过CommandParameter将2个硬编码参数传递给DelegateCommand。我目前将我的委托命令设置如下,因为鉴于局限性,这似乎最有意义

private DelegateCommand<Tuple<string, PartImportType>> _mySettingsImportCommandAsync;
public object MyImportCommandAsync
{
    get
    {
        if (_mySettingsImportCommandAsync == null)
        {
            _mySettingsImportCommandAsync = new DelegateCommand<Tuple<string, PartImportType>>(async partPayload => await OnOpenPartsSelectorCommandAsync(partPayload.Item1, partPayload.Item2));
         }
         return _mySettingsImportCommandAsync;
     }
}

问题就变成了如何在xaml中传递元组? 我想做这样的事情,但是显然这是行不通的

<Button Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Content="Import Settings From DB" Command="{Binding MySettingsImportCommandAsync}" CommandParameter="{system:Tuple<string, PartImportType> ("Event", viewEnums:PartImportType.SimEvent}" Margin="5">

我该怎么做?还是有更好的方法将这些信息从XAML获取到视图模型?我已经研究了多重绑定方法,但是由于我没有绑定视图中的任何内容,因此似乎无法完成这项工作……只是尝试传递一些硬编码值。

在接受第一个答案的建议后,我更新的XAML看起来像

<Button Grid.Row="1" Grid.Column="1"
                    Content="{Binding Part}"
                    Command="{Binding Path=OpenPartsSelectorCommandAsync}">
    <Button.CommandParameter>
        <enum:PartImportCommand
                        Argument="Part"
                        PartImportType="{x:Static enum:PartImportType.GenericPart}"
                        Location="Front"/>
     </Button.CommandParameter>
</Button>

1 个答案:

答案 0 :(得分:1)

使用具有两个读/写属性(名称比Item1和Item2更合适)的类或结构代替Tuple(没有无参数构造函数):

public class MyParam
{
    public string Item1 { get; set; }
    public PartImportType Item2 { get; set; }
}

并像这样使用它:

<Button ...>
    <Button.CommandParameter>
        <paramNamespace:MyParam
            Item1="Event"
            Item2="{x:Static viewEnums:PartImportType.SimEvent}"/>
    </Button.CommandParameter>
</Button>