簡體   English   中英

TabControl ItemsSource中基於綁定屬性值的DataTemplate

[英]DataTemplate Based on Value of Bound Property in ItemsSource of TabControl

好。 所以,我有一個TabControl在我XAML對象,其具有ItemsSource的值ItemsSource={Binding OpenTabs}其中OpenTabs是一個ObservableCollection類型的ClosableTabpublic ObservableCollection<ClosableTab> OpenTabs { get; set; }其延伸TabItem 我從這里找到ClosableTab ,然后根據自己的需要調整了它的視圖。

最初,我添加了一個屬性(抱歉,這里的名稱不正確) isProperty 這是針對房地產計划的。 然后在我的xaml中,我有以下幾行:

<DataTemplate x:Key="PropertyTemplate">
    <Grid>
        <TextBlock Text="{Binding address}"/>
    </Grid>
</DataTemplate>
<DataTemplate x:Key="TennantTemplate">
    <Grid>
        <TextBlock Text="{Binding name}"/>
    </Grid>
</DataTemplate>

//... That's in <Windows.Resources>

<TabControl ItemsSource="{Binding OpenTabs}" Grid.Column="1"  x:Name="Tabs">
    <TabControl.Resources>
        <DataTemplate x:Key="DefaultTab">
            <ContentControl>
                <ContentControl.Triggers>
                    <DataTrigger Binding="{Binding isProperty}" Value="True">
                        <Setter Property="ContentTemplate" Value="{StaticResource PropertyTemplate}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding isProperty}" Value="False">
                        <Setter Property="ContentTemplate" Value="{StaticResource TennantTemplate}" />
                    </DataTrigger>
                </ContentControl.Triggers>
            </ContentControl>
        </DataTemplate>
    </TabControl.Resources>
</TabControl>

我做了一些研究,發現這是我需要做的,如果我想有一定DataTemplate依賴於財產ClosableTab稱為isProperty

它沒有給我我想要的東西。 有人可以告訴我我在做什么錯嗎? 告訴我該怎么辦? 和/或可能給我另一種方法? 我想不出需要更改什么才能獲得所需的功能。 提前致謝。

如果要在“資源”部分下定義DataTemplate ,則需要在DataTemplate上設置DataType使其自動應用於基礎數據對象。

<DataTemplate DataType="local:ClosableTab">
    <ContentControl>
       <ContentControl.Triggers>
          <DataTrigger Binding="{Binding isProperty}" Value="True">
             <Setter Property="ContentTemplate"
                     Value="{StaticResource PropertyTemplate}" />
          </DataTrigger>
          <DataTrigger Binding="{Binding isProperty}" Value="False">
             <Setter Property="ContentTemplate"
                     Value="{StaticResource TennantTemplate}" />
          </DataTrigger>
       </ContentControl.Triggers>
    </ContentControl>
</DataTemplate>

確保申報local在根級別到一個地方命名ClosableTab聲明。

要么

而不是在資源中添加DataTemplate,而是將其顯式設置為TabControl的ItemTemplate

<TabControl>
  <TabControl.ItemTemplate>
     <DataTemplate x:Key="DefaultTab">
        .....
     </DataTemplate>
  </TabControl.ItemTemplate>
</TabControl>

UPDATE

理想的情況是只有一個DataTemplate並將dataTrigger應用於TextBlock。

<TabControl ItemsSource="{Binding OpenTabs}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Setter Property="Text" Value="{Binding address}"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding isProperty}"
                                         Value="False">
                                <Setter Property="Text" Value="{Binding name}"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM