为什么不使用Relay命令传递参数

时间:2015-04-01 21:46:45

标签: wpf vb.net relaycommand

我的项目中定义了一个用户控件,其中包含一个控件,我在视图模型中需要一个引用。为此,我在我的xaml中处理用户控件的加载事件,如下所示:

<UserControl
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml" 
         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
         x:Class="SchedulerView" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Unloaded">
        <i:InvokeCommandAction Command="{Binding Path=SchedulerUnloadedCommand}" />
    </i:EventTrigger>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding Path=SchedulerLoadedCommand}" CommandParameter="{Binding ElementName=scheduler}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

我在项目的其他部分使用了完全相同类型的CommandParameter绑定并且它运行良好,但由于某种原因,我需要引用的调度程序对象没有传递给下面显示的命令。

Private _schedulerLoadedCommand As ICommand

Public ReadOnly Property SchedulerLoadedCommand As ICommand
    Get
        If _schedulerLoadedCommand Is Nothing Then
            Dim MySchedulerLoaded As New Action(Of Object)(AddressOf SchedulerLoaded)
            _schedulerLoadedCommand = New RelayCommand(MySchedulerLoaded)
        End If
        Return _schedulerLoadedCommand
    End Get
End Property

Private Sub SchedulerLoaded(ByVal obj As Object)
    mrvm.scheduler = DirectCast(obj,C1Scheduler)

End Sub

SchedulerLoaded子中的断点显示参数obj的值为Nothing。

是否有可能只有一个有形版本的调度程序控件,我可以在Loaded事件时引用,或者在这里使用elementName不正确。

我欢迎您提出任何想法。

0 个答案:

没有答案