【发布时间】:2020-05-04 10:48:33
【问题描述】:
我想切换 TabControl 的 ItemTemplate 和 ContentTemplate。 因此,我为 TabItem 创建了两个 DataTemplate,为 TabContent 创建了两个 DataTemplate。 如果 CcLoginViewModel 中的 IsRunningSession 属性为真,则模板应切换。 我的问题是如何在 DataTrigger 中访问这个属性。
Xaml:
<DataTemplate x:Key="LoginContentDataTemplate" x:Name="LoginTemplate" DataType="{x:Type vm:CcPlayerViewModel}">
<local:CcLoginControl x:Name="LoginContentTemplate" DataContext="{Binding Login}" />
</DataTemplate>
<DataTemplate x:Key="PlayerContentDataTemplate" DataType="{x:Type vm:CcPlayerViewModel}">
<local:CcPlayerControl x:Name="PlayerContentDataTemplate" DataContext="{Binding}" />
</DataTemplate>
<Style x:Key="TabControlStyle" TargetType="{x:Type TabControl}">
<Setter Property="ContentTemplate" Value="{StaticResource LoginContentDataTemplate}" />
<Setter Property="ItemTemplate" Value="{StaticResource TabControlNewItemDataTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Login.IsRunningSession, Source={StaticResource PlayerTabItemTemplate}}" Value="True"> <-- Binding?
<Setter Property="ContentTemplate" Value="{StaticResource PlayerContentDataTemplate}" />
<Setter Property="ItemTemplate" Value="{StaticResource PlayerTabItemTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.Players/Login.IsRunningSession, ElementName=TabControlPlayers}" Value="False"> <-- Binding?
<Setter Property="ContentTemplate" Value="{StaticResource LoginContentDataTemplate}" />
<Setter Property="ItemTemplate" Value="{StaticResource TabControlNewItemDataTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Window.DataContext>
<vm:CcMainViewModel x:Name="MainViewModel" />
</Window.DataContext>
<Grid>
<TabControl Name="TabControlPlayers"
ItemsSource="{Binding Players}"
Style="{DynamicResource TabControlStyle}"/>
</Grid>
视图模型:
public class CcMainViewModel : CcViewModelBase
{
public ObservableCollection<CcPlayerViewModel> Players { get; set; }
}
public class CcPlayerViewModel : CcViewModelBase
{
public CcLoginViewModel Login { get; set; }
}
public class CcLoginViewModel : CcViewModelBase
{
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged();
}
}
}
public string Password
{
get { return password; }
set
{
if (password != value)
{
password = value;
OnPropertyChanged();
}
}
}
public bool IsRunningSession
{
get { return isRunningSession; }
set
{
if (isRunningSession != value)
{
isRunningSession = value;
OnPropertyChanged();
}
}
}
}
【问题讨论】:
-
检查这个:DataTempalteSelector
标签: c# wpf datatemplate datatrigger