我有一个带有ContentTemplate的TabControl,它定义了一个CheckBox。在TabControl之外,我想绑定到当前选定的TabItem中的CheckBox。我如何才能做到这一点?
在下面的代码中,CheckBox "Mirror "被绑定到同一级别的CheckBox上,这就可以了。如何让Mirror-CheckBox镜像tabCheckbox?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TabControl Grid.Row="0">
<TabControl.ContentTemplate>
<DataTemplate>
<CheckBox
Name="tabCheckbox"
Content="Check me"
/>
</DataTemplate>
</TabControl.ContentTemplate>
<TabItem Header="Tab 1">
</TabItem>
</TabControl>
<CheckBox
x:Name="checkbox"
Grid.Row="1"
Content="Some CheckBox"
/>
<CheckBox
Grid.Row="2"
Content="Mirror"
IsChecked="{Binding ElementName=checkbox, Path=IsChecked}"
/>
</Grid>
将两个CheckBox绑定到同一个ViewModel属性是有意义的。这样你就可以只将焦点标签页的内容绑定到独立CheckBox使用的目标视图模型上。
据我所知,从DataTemplate外部绑定到DataTemplate内部的元素是不可能的。但是你可以从镜像复选框绑定到tabCheckbox。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TabControl Grid.Row="0">
<TabControl.ContentTemplate>
<DataTemplate>
<CheckBox
x:Name="tabCheckbox"
Content="Check me"
IsChecked="{Binding IsChecked, Source={x:Reference mirrorCheckBox}}" />
</DataTemplate>
</TabControl.ContentTemplate>
<TabItem Header="Tab 1">
</TabItem>
</TabControl>
<CheckBox
x:Name="mirrorCheckBox"
Grid.Row="2"
Content="Mirror"
/>
</Grid>
x:引用 允许你在这种情况下直接用元素的名称来引用。