根据条件显示表项内容

本文关键字:显示 条件 | 更新日期: 2023-09-27 18:11:45

我想根据属性显示制表项内容。这可能吗?

为了解释,我有另一个xaml,它嵌入在主xaml中,如下所示

<TabItem Header="TabItem" >
   <view:PaneView1 />
</TabItem>

现在我有另一个PaneView2。根据条件的不同,内部的xaml应该显示如下

<TabItem Header="TabItem" >
   <!-- Condition here - if (x == true)-->
      <view:PaneView1 />
   <!-- else -->
      <view:PaneView2 />
</TabItem>

这可能吗?

根据条件显示表项内容

有几个解决方案,最简单的一个是通过使用DataTrigger并根据您的条件设置内容

 <TabControl>
    <TabItem Header="TabItem" >
        <TabItem.Style>
            <Style TargetType="TabItem">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Condition}" Value="True">
                        <Setter Property="Content">
                            <Setter.Value>
                                <view:PaneView1 />
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Condition}" Value="False">
                        <Setter Property="Content" >
                            <Setter.Value>
                                    <view:PaneView2 />
                                </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TabItem.Style>                    
    </TabItem>
    </TabControl>
条件

 private bool _condition = false;
 public bool Condition
 {
     get
     {
         return _condition;
     }
     set
     {
         if (_condition == value)
         {
             return;
         }
         _condition = value;
         OnPropertyChanged();
      }
 }

使用触发器在view:PaneView1view:PaneView2之间切换可见性:

<StackPanel>
    <CheckBox x:Name="MyCheckBox" Content="Edit value"/>
    <TabControl>
        <TabItem Header="TabItem">
            <TabItem.ContentTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock x:Name="MyTextBlock" Text="You can't edit me"/>
                        <TextBox x:Name="MyTextBox" Visibility="Collapsed" Text="You can edit me"/>
                    </Grid>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckBox, UpdateSourceTrigger=PropertyChanged}" Value="True">
                            <Setter TargetName="MyTextBlock" Property="Visibility" Value="Collapsed"/>
                            <Setter TargetName="MyTextBox" Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </TabItem.ContentTemplate>
        </TabItem>
    </TabControl>
</StackPanel>

您可以绑定到DataTrigger.Binding中的任何值-无论是从UI还是从数据上下文(示例代码绑定到UI)。