当前页面指示器 MVVM

发布于 2024-12-22 03:48:22 字数 581 浏览 1 评论 0原文

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

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

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

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

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

In my WPF application I'm trying to navigate to other 'pages' using the ContentControl.
I have this working so far, in my MainViewModel I have initiated the other viewmodels that should be a part of the MainViewModel.

I display my views with a datatemplate like this:

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

I got a ItemsControl with TextBlocks to display the View(models) PageName property, when I click on this, it does set the 'CurrentView' property to the according ViewModel and it gets displayed. So this aint the problem... However, the issue I come across now is how to let the textblock display the CurrentView I have, for example I want it to be another color then the rest of the textblocks so the user can see which view(model) is active.

I tried to do this in the Style for the textblock with a DataTrigger but this only accepts constant values, any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无人问我粥可暖 2024-12-29 03:48:22

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

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

Why not switch the ItemsControl to a ListBox since it has built-in selection features? You can style it so it hides the selection highlight and looks the same as your ItemsControl, and base your trigger off of ListBoxItem.IsSelected.

If you don't want to do that, you can probably use a IMultiValueConverter to pass the current ViewModel and the active ViewModel to a converter, which would return True if the items are the same, or false if not.

意中人 2024-12-29 03:48:22

创建一个 IValueConverter,该 IValueConverter 会返回所提供的视图是否为活动视图,并将其添加到 DataTrigger 的绑定中。

示例转换器:

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

示例 xaml:

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

<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True"> 

Create a IValueConverter that returns if the supplied view is the active view and add it to the binding of the DataTrigger.

Sample Converter:

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

Sample xaml:

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

<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True"> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文