我的项目中定义了一个用户控件,其中包含一个控件,我在视图模型中需要一个引用。为此,我在我的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不正确。
我欢迎您提出任何想法。