【问题标题】:MVVM multiple bindings on a User Control用户控件上的 MVVM 多个绑定
【发布时间】:2012-03-15 13:38:06
【问题描述】:

我有一个用户控件“SubjectListView”。绑定设置为“AllSubjects”,它是 SubjectListViewModel 中的 ObservableCollection。它用于检索名称并执行命令。名称被检索,但是同样在 SubjectListViewModel 中的命令不会在按钮上执行,而是在没有在范围之外动态创建的按钮上工作。

有解决办法吗?

<StackPanel>
    <ItemsControl ItemsSource="{Binding AllSubjects}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Button Width="100" Content="{Binding Name}" <!-- Is working-->
                    Command="{Binding InvasionCommand}" <!--Is NOT working--> />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <Button Content="Check for Invasion" Width="120" Command="{Binding InvasionCommand}" <!-- Is working-->/>
</StackPanel>

【问题讨论】:

  • 给你最外层的StackPanel一个x:Name。在您的命令绑定上,使用ElementName 指向命名的StackPanel,然后执行Path=DataContext.InvasionCommand
  • @jberger 谢谢它现在正在工作:)

标签: wpf xaml binding mvvm


【解决方案1】:

问题是,InvasionCommand 在您的视图模型中(我认为是这样),但您在 ItemsSource 的实际元素中..

为此,我使用ElementSpy,但我认为如果您使用RelativeSource 它将起作用..

在这里您可以概览所有可能的绑定:http://www.nbdtech.com/Free/WpfBinding.pdf

或者,如果您将 StackPanel 命名为 Container,您可以绑定以下内容:

Binding ElementName=Container, Path=DataContext

【讨论】:

  • 谢谢我设置了 StackPanel 并设置了 ElementName,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 2010-12-15
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多