簡體   English   中英

C#WPF MVVM TabItem HeaderTemplate無法正常工作嗎?

[英]C# WPF MVVM TabItem HeaderTemplate won't work?

我當前正在使用帶有TabControl的應用程序,每個選項卡都有一個ViewModel,該ViewModel繼承自ITabViewModel ,它具有兩個屬性: HeaderTextHeaderImage 我希望可以從每個ViewModel中進行設置。 因此,我嘗試使用HeaderTemplate樣式,但這沒有用。 誰能告訴我如何使它起作用?

<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
                            <TextBlock Text="{Binding HeaderText}"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabItem DataContext="{Binding ViewModelStart}">

    </TabItem>

    <TabItem DataContext="{Binding ViewModelStartupManager}">

    </TabItem>
</TabControl>

只需在ItemTemplate部分下定義DataTemplate

 <TabControl>
    <TabControl.ItemTemplate>
        <DataTemplate>
             <StackPanel Orientation="Horizontal">

以此類推

ItemTemplate是用於格式化ItemsSource中的每個項目以創建標題的模板

我認為至少有兩個選擇適合您。

首先 (我假設ViewModelStartViewModelStartupManager是屬性):

 <TabItem Header="{Binding ViewModelStart}">
 <TabItem Header="{Binding ViewModelStartupManager}">

其次 ,使用ItemsSource並在ViewModel的某些集合中定義選項卡。

視圖模型:

public ObservableCollection<ITabViewModel> Tabs{ get; set; }

XAML,刪除您的TabItem's並將其添加到上面的屬性中。 還要向TabControl添加以下屬性:

ItemsSource="{Binding Tabs}"

您需要為要應用的HeaderTemplate設置TabItemHeader屬性:

<TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

</TabItem>

<TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

</TabItem>

這有效:

<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding HeaderImage}" Height="20" Margin="5, 0"/>
                            <TextBlock Text="{Binding HeaderText}"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabItem DataContext="{Binding ViewModelStart}" Header="{Binding}">

    </TabItem>

    <TabItem DataContext="{Binding ViewModelStartupManager}" Header="{Binding}">

    </TabItem>
</TabControl>

暫無
暫無

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

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