为什么CommandParameter始终为null

本文关键字:null CommandParameter 为什么 | 更新日期: 2023-09-27 18:29:56

有人知道为什么CommandParameter总是null吗?

类TransactionViewModel具有要在ItemsControl中显示的TransactionCommands的集合属性。这些项的类型为CommandViewModel。

TransactionBrowserViewModel具有命令AddJobForSelectedTransactionCommand。要作为参数传递的命令CommandViewModel。

查看代码段:

        <ItemsControl Grid.Row="4"
                      ItemsSource="{Binding TransactionCommands}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <telerik:RadButton Content="{Binding DisplayName}"
                                       CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Self}}"
                                       Command="{Binding ViewModel.AddJobForSelectedTransactionCommand, ElementName=userControl}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl> 

UserControl的代码隐藏:

[Export]
public partial class TransactionBrowserView : UserControl, IView<TransactionBrowserViewModel>
{       
    [ImportingConstructor]
    public TransactionBrowserView()
    {
        InitializeComponent();
    }
    [Import]
    public TransactionBrowserViewModel ViewModel
    {
        get { return (TransactionBrowserViewModel)this.DataContext; }
        set { this.DataContext = value; }
    }
}

为什么CommandParameter始终为null

好的,很抱歉我发现了错误。它位于Telerik的RadButton上。我已经用一个默认按钮测试了这个场景。在这里它工作没有任何问题。

您已经将ComandParameter设置为RadButtonDataContext的路径,但我看不出您在任何地方都对DataContext设置了任何内容。

查看"输出"窗口以获取有关绑定错误的信息。。。它应该说类似于"在对象XXX上没有DataContext属性"的内容。

试图绑定到CommandParameter属性的是什么?

尝试此绑定

<ItemsControl x:Name="transactionList" Grid.Row="4" ItemsSource="{Binding TransactionCommands}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <telerik:RadButton Content="{Binding DisplayName}"
                         CommandParameter="{Binding SelectedItem, ElementName=transactionList}"
                         Command="{Binding ViewModel.AddJobForSelectedTransactionCommand, ElementName=userControl}"/>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl> 

赋予ItemsControl(如transactionList),并设置CommandParameter与transactionList的SelectedItem的绑定。

或者这不是你想要的。

<telerik:RadButton Content="{Binding DisplayName}"
                   CommandParameter="{Binding}"
                   Command="{Binding ViewModel.AddJobForSelectedTransactionCommand, ElementName=userControl}"/>