2015-09-08 56 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)。