我有一个非常奇怪的问题。在我的 WP7 应用程序中,我有一个枢轴控件和一个在其中定义的项目模板(或者在资源中,我尝试了两种方法,但仍然存在同样的问题)。在模板中,我有一个定义了 EventToCommand 的常规按钮(EventName="Click")。我在枢轴外部也有相同的复制粘贴按钮。问题是枢轴外部的按钮工作正常,但内部的按钮不起作用。实际上我注意到,我的枢轴内的任何命令都不起作用。我正在正确处理 ViewModel 中的命令,因为相同的按钮,但在枢轴之外工作得很好。 任何想法可能是什么问题?请帮助。 提前致谢。 干杯。
附注我的代码非常标准,但以防万一,它是:
<controls:Pivot Grid.Row="0"
x:Name="PivotControl"
Title="{Binding ApplicationTitle}"
ItemsSource="{Binding BlaBla}">
<controls:Pivot.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Content="Click Me">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding MyCommand, Mode=OneWay}" CommandParameterValue="Test"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
...
以及 ViewModel 代码:
public RelayCommand<string> MyCommand
{
get;
private set;
}
//And in the constructor ...
MyCommand= new RelayCommand<string>((param) => HandleTheCommand(param));
...
再次感谢。
最佳答案
因为您位于控件的 ItemTemplate 内,所以您绑定(bind)到的 DataContext
不是您的 ViewModel。绑定(bind) {Binding MyCommand, OneWay}
正在尝试从集合 BlaBla 中的对象上查找属性 MyCommand
。这是命令模式的限制之一,因为在 DataTemplates 中,您的 DataContext 通常不是您的 ViewModel。
确实没有什么好的办法。您可以将命令包含在 BlaBla 集合的对象中。您还可以调整自己的触发器,在 VisualTree 中搜索 ViewModel,然后通过反射而不是实际绑定(bind)检索命令。
关于silverlight - MVVM Light EventToCommand 在 WP7 Pivot DataTemplate 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051634/