0

在我的 WPF 应用程序中,我试图使用 ContentControl 导航到其他“页面”。到目前为止,我已经完成了这项工作,在我的 MainViewModel 中,我已经启动了其他应该是 MainViewModel 一部分的视图模型。

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

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

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

我尝试使用 DataTrigger 在文本块的样式中执行此操作,但这仅接受常量值,有什么想法吗?

4

2 回答 2

1

为什么不切换ItemsControl到 a ,ListBox因为它具有内置的选择功能?您可以设置它的样式,使其隐藏选择突出显示并且看起来与您的相同ItemsControl,并基于您的触发器ListBoxItem.IsSelected

如果您不想这样做,您可以使用IMultiValueConverter将当前 ViewModel 和活动 ViewModel 传递给转换器,如果项目相同,它将返回 True,否则返回 false。

于 2011-12-20T16:06:07.337 回答
0

如果提供的视图是活动视图,则创建一个IValueConverter返回并将其添加到 DataTrigger 的绑定中。

样品转换器:

public class IsViewActiveConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == [activeView];
    }
}

示例 xml:

<UserControl.Resources>
     <local:IsViewActiveConverter x:Key="IsViewActive"/>
</UserControl.Resources>

<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True"> 
于 2011-12-20T15:45:05.460 回答