WPF MVVM - 因为 ItemsSource 找不到绑定命令

问题描述 投票:0回答:1

我有一个绑定了 ItemsSource 的自定义 TabControl。 ItemTemplate 内部是一个按钮,我想将其命令绑定到我的 DataContext (ViewModel) 中的 RelayCommand。

问题是,应用程序正在我的 ItemsSource 项目中寻找命令。

<TabControl ItemsSource="{Binding ViewModel.TabItems,UpdateSourceTrigger=PropertyChanged}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <DockPanel>
                <!-- The "Header" is from the "TabItems" Model -->
                <TextBlock Text="{Binding Header}" />
                <!-- I want to bind this Command outside the "TabItems" Model -->
                <Button Command="{Binding ViewModel.CounterIncrementCommand, Mode=OneWay}"/>
            </DockPanel>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBox>Test</TextBox>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

我得到绑定失败:

  • DataContext:TabControllitemModel
  • 绑定路径:ViewModel
  • 目标:Button.Command
  • 目标类型:ICommand
  • 描述:在类型的对象上找不到 ViewModel 属性 TabControlItemModel
wpf mvvm viewmodel datacontext itemssource
1个回答
0
投票

好的,我发现了。有了这个,我可以将按钮的 DataContext 设置为与窗口/页面相同的一个:

<Button DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" Command="{Binding ViewModel.CounterIncrementCommand}"/>

© www.soinside.com 2019 - 2024. All rights reserved.