0

我有一个由列表填充的项目控件,列表是两个参数“时间”和“描述”的集合。为此,我使用 HyperLinkBut​​ton 表示时间,使用 Label 表示描述。

我想要的是,我想在主视图模型中使用超链接按钮的 EventTrigger 创建单击事件。我的代码是:

<ItemsControl 
    x:Name="transcriptionTextControl" 
    ItemsSource="{Binding MyCollectionOfTranscription, Mode=TwoWay}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <HyperlinkButton Content="{Binding Time}">
                    <ToolTipService.ToolTip>
                        <ToolTip Content="Time"/>
                    </ToolTipService.ToolTip>
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="Click">
                            <i:InvokeCommandAction 
                                Command="{Binding HyperLinkButtonCommand}" 
                                CommandParameter="{Binding 
                                    ElementName=transcriptionTextControl }" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </HyperlinkButton>
                <sdk:Label Content="{Binding Description}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

当我构建项目时,它没有给出错误,但超链接的 ICommand 显示警告为“无法解析符号 HyperLinkBut​​tonCommand”,而此事件触发器在此之外工作正常。

没有得到,它背后的实际问题是什么,请提出您的宝贵建议......

4

1 回答 1

1

首先,

<i:InvokeCommandAction 
    Command="{Binding HyperLinkButtonCommand}" 
    CommandParameter="{Binding 
        ElementName=transcriptionTextControl }" />

Binding 试图定位HyperLinkButtonCommand在其中包含的类型的实例上调用的属性MyCollectionOfTranscription(您不需要绑定到这个双向)。

(旁注,将 ItemsControl 发送到您的 Command不是MVVM。)

迭代此集合中的ItemsControl每个元素,创建定义在 中的模板的副本ItemsControl.ItemTemplate,并设置BindingContext等于此元素(我假设它是一个成绩单)。HyperLinkButtonCommand如果您启动数据绑定调试设置,您可以从绑定无法找到您的警告中看出这一点。

在此处输入图像描述

假设

  1. HyperLinkButtonCommand是您的 ViewModel 中定义的命令,并且
  2. 这个 xaml 的根是一个窗口(可能是一个用户控件,但我在这里假设)
  3. 您的 ViewModel 是DataContextWindow 的

您可以将绑定更改为以下内容,它应该可以工作(或者您应该从中获得线索)

<i:InvokeCommandAction 
    Command="{Binding HyperLinkButtonCommand, 
              RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" 
    CommandParameter="{Binding 
        ElementName=transcriptionTextControl }" />

在这种情况下,我更喜欢只给我的 root 一个x:Name“root”并使用“ElementName=root”。

于 2012-08-01T14:21:30.633 回答