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

Posted

技术标签:

【中文标题】将 typeof 作为参数传递给来自 xaml 的命令【英文标题】:Pass typeof as parameter to a command from xaml 【发布时间】:2014-11-12 16:48:21 【问题描述】:

我正在构建一个具有 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"/>

...

视图模型

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();

【问题讨论】:

使用命令参数,也许这个对你有用:***.com/questions/3482343/…和***.com/questions/10438564/… 【参考方案1】:

您可以使用CommandParameter

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

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

【讨论】:

对传递系统类型感兴趣的朋友,在xaml的顶部添加xmlns:system="clr-namespace:System;assembly=mscorlib",然后可以传递CommandParameter="x:Type system:Int32"

以上是关于将 typeof 作为参数传递给来自 xaml 的命令的主要内容,如果未能解决你的问题,请参考以下文章

将列表作为参数传递给 Python C 模块?

通过 Uri 将参数传递给 WPF 页面

从 Swift 将文件作为参数传递给 C++ 方法

如何将参数传递给 ServiceHost

如何将 KeyEventArgs 参数传递给命令

如何将变量作为 cURL 数组中的 url 参数传递给 CURLOPT_URL