我有一个按列表填充的Item控件,list是两个参数'Time'和'Description'的集合。对于它,我使用HyperLinkButton作为时间,使用Label进行描述。
我想要的是,我想使用Main viewModel中的hyperLink按钮的EventTrigger创建click事件。我的代码是:
<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>
当我构建项目时,它不会给出错误,但是对于hyperLink的ICommand,显示警告为“无法解析符号HyperLinkButtonCommand”,而此事件触发器在此之外工作正常。
没有得到,背后的实际问题是什么,请提出宝贵的建议......
答案 0 :(得分:1)
首先,
<i:InvokeCommandAction
Command="{Binding HyperLinkButtonCommand}"
CommandParameter="{Binding
ElementName=transcriptionTextControl }" />
Binding正试图在HyperLinkButtonCommand
中包含的类型的实例上找到一个名为MyCollectionOfTranscription
的属性(您不需要绑定到这个双向)。
(旁注,将ItemsControl发送到您的Command是而不是 MVVM。)
ItemsControl
遍历此集合中的每个元素,创建ItemsControl.ItemTemplate
中定义的模板的副本,并将BindingContext
设置为等于此元素(我假设其为Transcript) 。如果您启动数据绑定调试设置,您可以从绑定中找到的警告中找不到HyperLinkButtonCommand
。
假设
HyperLinkButtonCommand
是在ViewModel中定义的命令,DataContext
您可以将绑定更改为以下内容并且它应该可以正常工作(或者您应该从中获取线索)
<i:InvokeCommandAction
Command="{Binding HyperLinkButtonCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
CommandParameter="{Binding
ElementName=transcriptionTextControl }" />
我更喜欢只给我的root x:Name
“root”并在这种情况下使用“ElementName = root”。