我有一个绑定了 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 设置为与窗口/页面相同的一个:
<Button DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" Command="{Binding ViewModel.CounterIncrementCommand}"/>