将 typeof 作为参数传递给 xaml 中的命令

本文关键字:xaml 命令 参数传递 typeof | 更新日期: 2023-09-27 18:30:17

我正在构建一个具有RibbonWindow和TabCollection的应用程序。

每个功能区按钮都有一个命令,用于打开特定用户控件的选项卡。每个命令都做同样的事情,但差异很小,它们打开一个带有特定 UserControl 的选项卡。有没有一种好方法可以将该UserControl类型传递给一个名为OpenTabCommand的命令?

这是它现在的样子:

哈姆勒...

<RibbonButton Label="OpenTab1"
              LargeImageSource="/something.png" 
              Command="{Binding OpenTab1Command}" />
<RibbonButton Label="OpenTab2"
              SmallImageSource="/something.png" 
              Command="{Binding OpenTab2Command}"/>

视图模型

public RelayCommand OpenTab1Command{ get; set; }
public RelayCommand OpenTab2Command { get; set; }
public MainViewModel()
{
    OpenTab1Command= new RelayCommand(OpenTab1, param => true);
    OpenTab2Command = new SearchCommand(OpenTab2, param => true);
}
private void OpenTab1()
{
    var item = new TabItem
    {
        Content = new Tab1(),
    };
    TabCollection.Add(item);
    item.Focus();
}
private void OpenTab2()
{
    var item = new TabItem
    {
        Content = new Tab2(),
    };
    TabCollection.Add(item);
    item.Focus();
}

将 typeof 作为参数传递给 xaml 中的命令

您可以使用

CommandParameter

<RibbonButton Label="OpenTab1"
              LargeImageSource="/something.png" 
              Command="{Binding OpenTab1Command}" 
              CommandParameter="{x:Type (YOUR TYPE)}"/>

并确保RelayCommand接受其处理程序上的参数。