我正在搞乱MVVM,我用按钮绑定命令遇到了一些障碍。我在View(= UserControl)中有几个按钮,这些按钮是根据我拥有的对象列表生成的。
我的代码如下所示:
(MainWindow)
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="12,57,12,12" />
(用户控件)
<ItemsControl ItemsSource="{Binding AllConnections}" Margin="0,34,0,0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Password}" Height="23" HorizontalAlignment="Left" Margin="114,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Command="{Binding Path=ConnectCommand}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但ConnectCommand没有被调用,我认为这是因为XAML正在AllConnections绑定中寻找它,而不是ViewModels绑定它应该在哪里。我该如何指定?
答案 0 :(得分:3)
您应该使用相对来源来指定祖先。像这样:
Command = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=ViewModel.CommandToBind}"
答案 1 :(得分:1)
您可以将命令添加到参考资料,然后使用{StaticResource yourCommand}
。这可以大大简化xaml。
有用的链接:
WPF Commands, How to declare Application level commands?
Commands as XAML Resources
MVVM Commanding inside of a datatemplate