2015-09-08 38 views
0

我想根据属性显示选项卡项目内容。可能吗?根据条件显示tabitem内容

为了解释,我有一个被嵌入在主XAML如下

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

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

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

这可能吗?

+1

检查在后端的条件内容。或从视图模型绑定可视性属性 –

+0

您从哪里获取条件?它在同一页面吗?如果是这样,那么你可以使用IValueConverter进行绑定。或者你可以去MVVM模型来实现这一点。 –

回答

1

有几种解决方案是,一个最简单的是用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(); 
     } 
} 
0

使用触发器来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)。