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

Ver*_*dus 3 c# wpf xaml icommand commandparameter

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

每个RibbonButton都有一个命令来打开特定UserControl的选项卡。每个命令都做相同的事情,只是差别很小,它们打开带有特定UserControl的选项卡。是否有一种很好的方法将UserControl类型传递给一个称为OpenTabCommand的命令?

现在是这样的:

Xaml ...

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

<RibbonButton Label="OpenTab2"
              SmallImageSource="/something.png" 
              Command="{Binding OpenTab2Command}"/>
Run Code Online (Sandbox Code Playgroud)

...

视图模型

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();
}
Run Code Online (Sandbox Code Playgroud)

123*_*9 0 5

您可以使用 CommandParameter

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

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