使用MVVMLight EventToCommand和Page Load事件传递CommandParameter?

时间:2011-10-21 13:09:18

标签: load mvvm-light commandparameter eventtocommand

EventToCommand无法在加载事件

上传递命令参数

当附加到页面或用户控件的Load事件时,EventToCommand成功调用ViewModel中的处理程序,但不传递CommandParameter。但是,相同的XAML附加到另一个事件,例如按钮单击,命令处理程序接收数据绑定数据作为其参数。 XAML:

<i:EventTrigger EventName="Loaded" SourceObject="{Binding ElementName=Control}"> <Command:EventToCommand x:Name="etcLoad" Command="{Binding LoadCommand}" CommandParameter="{Binding Target, ElementName=Control}" /> </i:EventTrigger>

目标是视图上的字符串DP。

VM代码:

    internal void Load(string p_Param)
    {
        this.Initialise();
    }

    public RelayCommand<string> LoadCommand { get; private set; }

并且命令分配如此:

    this.LoadCommand = new RelayCommand<string>(this.Load);

我几乎可以肯定问题在于绑定的执行晚于目标DP的分配或类似的事情。我有兴趣为这个ASAP或其他方式找到一个解决方案,我可能会从View中获取一个字符串,并进入ViewModel,其中字符串是从OnNavigateTo覆盖分配的。目标是根据通过URI提供的查询属性提供选项卡的选择,即“/ Views / DisplayTabDetails?Tab = Tab1”或类似内容。

1 个答案:

答案 0 :(得分:4)

使用PassEventArgsToCommand属性指示应将事件args传递给命令。因此,在您的XAML中,您应该使用:

<i:EventTrigger EventName="Loaded" 
                SourceObject="{Binding ElementName=Control}"> 
    <Command:EventToCommand x:Name="etcLoad" 
                            Command="{Binding LoadCommand}" 
                            PassEventArgsToCommand="True" /> 
</i:EventTrigger>

修改

有些事件会在用户互动发生之前触发。在这种情况下通常采用的方法是从后面的代码调用您的命令。在this post中你可以看到这个概念,你显然必须将它改为加载的事件,你的需求,概念和原因是相同的。