【问题标题】:Pass typeof as parameter to a command from xaml将 typeof 作为参数传递给来自 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();
}

【问题讨论】:

标签: c# wpf xaml icommand commandparameter


【解决方案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}"
猜你喜欢
  • 2010-09-26
  • 2011-12-30
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 2012-03-25
  • 2013-06-03
相关资源
最近更新 更多