如何从TabItem HeaderTemplate访问TabItem中的复选框控件

时间:2014-02-27 13:01:37

标签: wpf

我有tabItem,其中包含一个CheckBox。我正在绑定一个ListBox。基于复选框检查状态,我需要控制ListBox的可见性。我使用布尔到可见性转换器将IsChecked属性绑定到ListBox的Visiblity属性。但它不会更改Listbox的状态。

如何获得控制状态?

我附上了我的代码。

<TabItem  Header="Trigger">
    <TabItem.HeaderTemplate>
        <DataTemplate>
            <DockPanel>
                <CheckBox x:Name="ui_chbTrigger" IsChecked="{Binding SelectedUiSeries.UiTriggerParameters.HasEcgPulsingConfig, Mode=TwoWay}"/>
                <Label Content="Trigger" HorizontalAlignment="Center" FontSize="18" FontWeight="Bold"/>
            </DockPanel>
        </DataTemplate>
    </TabItem.HeaderTemplate>

    <Grid >
        <ListBox Grid.Row="1" Style="{StaticResource S_ListBoxParameterScan}"
                 ItemContainerStyle="{StaticResource S_ListBoxItemScanParameter}"
            Visibility="{Binding Path=IsChecked, Converter={StaticResource BooleanToVisiblityConverter}, ElementName=ui_chbTrigger}">
            <ListBoxItem>
                <util:HeaderComboBox Style="{DynamicResource S_HeaderComboBoxParameter}" Header="Trigger Type"
                                 ItemsSource="{helpers:EnumBindingHelper {x:Type commonDefs:TriggerType}}"
                                 SelectedItem="{Binding SelectedUiSeries.UiTriggerParameters.TriggerType,Mode=TwoWay}"/>
            </ListBoxItem>
        </ListBox>
    </Grid >
</TabItem>

2 个答案:

答案 0 :(得分:0)

如何从TEMPLATE引用控件(您的复选框位于HeaderTemplate中)

您可以按以下方式更改代码

      <TabControl>
        <TabItem>
            <TabItem.Header>
                <DockPanel>
                    <CheckBox x:Name="ui_chbTrigger"/>
                </DockPanel>
            </TabItem.Header>

            <Grid >
                <ListBox Visibility="{Binding Path=IsChecked, Converter={StaticResource BooleanToVisiblityConverter}, ElementName=ui_chbTrigger}">
                    <ListBoxItem>
                       <TextBlock>1</TextBlock>
                    </ListBoxItem>
                    <ListBoxItem>
                        <TextBlock>2</TextBlock>
                    </ListBoxItem>
                </ListBox>
            </Grid >
        </TabItem>
    </TabControl>

随意根据需要进行进一步的更改。

答案 1 :(得分:0)

您的CheckBox已绑定到SelectedUiSeries.UiTriggerParameters.HasEcgPulsingConfig

只需将其他UI元素绑定到ViewModel中的同一属性,而不是尝试执行基于ElementName的绑定:

  <ListBox Visibility="{Binding Path=SelectedUiSeries.UiTriggerParameters.HasEcgPulsingConfig,
                                Converter={StaticResource BooleanToVisiblityConverter}}"/>