当前页面指示器MVVM

时间:2011-12-20 15:32:40

标签: wpf mvvm contentcontrol

在我的WPF应用程序中,我正在尝试使用ContentControl导航到其他“页面”。 到目前为止,我有这个工作,在我的MainViewModel中,我已经启动了应该是MainViewModel的一部分的其他viewmodel。

我用这样的数据模板显示我的视图:

        <DataTemplate DataType="{x:Type vm:NewsViewModel}">
            <Views:NewsView />
        </DataTemplate>

我有一个带有TextBlocks的ItemsControl来显示View(模型)PageName属性,当我点击它时,它确实将'CurrentView'属性设置为相应的ViewModel并显示它。所以这不是问题...但是,我现在遇到的问题是如何让文本块显示我拥有的CurrentView,例如我希望它是另一种颜色,然后是其他文本块,以便用户可以看到哪个视图(模特)活跃。

我尝试在带有DataTrigger的textblock的样式中执行此操作,但这只接受常量值,任何想法?

2 个答案:

答案 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}}