为什么CommandParameter总是为空?

时间:2013-09-02 08:22:59

标签: c# wpf binding command commandparameter

任何人都知道为什么CommandParameter总是为空?

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

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

查看Snipp:

        <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; }
    }
}

3 个答案:

答案 0 :(得分:0)

您已将ComandParameter设置为DataContext RadButton的路径,但我发现您没有为DataContext设置任何内容任何地方。

查看“输出”窗口,了解有关绑定错误的信息......它应该说“对象XXX&#39;上没有DataContext属性”。

尝试绑定到CommandParameter属性是什么?

答案 1 :(得分:0)

尝试此绑定

<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}"/>

答案 2 :(得分:0)

好的,对不起,我发现了错误。 它位于Telerik的RadButton上。我用默认按钮测试了场景。这里没有任何问题。