我正在尝试通过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>
答案 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>