如何在MVVM中指定命令绑定范围?

时间:2012-01-07 14:26:24

标签: xaml mvvm

我正在搞乱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绑定它应该在哪里。我该如何指定?

2 个答案:

答案 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