在我的WPF应用程序中,我正在尝试使用ContentControl导航到其他“页面”。 到目前为止,我有这个工作,在我的MainViewModel中,我已经启动了应该是MainViewModel的一部分的其他viewmodel。
我用这样的数据模板显示我的视图:
<DataTemplate DataType="{x:Type vm:NewsViewModel}">
<Views:NewsView />
</DataTemplate>
我有一个带有TextBlocks的ItemsControl来显示View(模型)PageName属性,当我点击它时,它确实将'CurrentView'属性设置为相应的ViewModel并显示它。所以这不是问题...但是,我现在遇到的问题是如何让文本块显示我拥有的CurrentView,例如我希望它是另一种颜色,然后是其他文本块,以便用户可以看到哪个视图(模特)活跃。
我尝试在带有DataTrigger的textblock的样式中执行此操作,但这只接受常量值,任何想法?
答案 0 :(得分:1)
为什么不将ItemsControl
切换为ListBox
,因为它具有内置选择功能?您可以对其进行样式设置,使其隐藏选择突出显示并与ItemsControl
看起来相同,并使您的触发器基于ListBoxItem.IsSelected
。
如果您不想这样做,您可以使用IMultiValueConverter将当前ViewModel和活动ViewModel传递给转换器,如果项目相同则返回True,如果是,则返回false不
答案 1 :(得分:0)
创建一个IValueConverter
,如果提供的视图是活动视图,则返回public class IsViewActiveConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == [activeView];
}
}
并将其添加到DataTrigger的绑定中。
示例转换器:
<UserControl.Resources>
<local:IsViewActiveConverter x:Key="IsViewActive"/>
</UserControl.Resources>
<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True">
示例xaml:
{{1}}