如何使用WPF现代UI将数据绑定到菜单链接

本文关键字:数据绑定 菜单 链接 UI 何使用 WPF 现代 | 更新日期: 2023-09-27 18:21:13

我正在学习WPF,我发现Modern UI对于构建WPF应用程序来说真的很棒。然而,我找不到用Modern UI绑定菜单链接内容(DisplayName属性)的方法。目前,我只能在代码后面更改DisplayName属性。感谢您的帮助!非常感谢。

<Grid Style="{StaticResource ContentRoot}">
    <mui:ModernTab x:Name="ModernTab" Layout="List" SelectedSource="/Pages/Messages/Inbox.xaml">
        <mui:ModernTab.Links>
            <mui:Link x:Name="NewMessage"  DisplayName="New Message" Source="/Pages/Messages/NewMessage.xaml" />
            <mui:Link x:Name="InboxLink" DisplayName="Inbox"  Source="/Pages/Messages/Inbox.xaml" />
            <mui:Link x:Name="SentLink" DisplayName="Sent" Source="/Pages/Messages/Sent.xaml" />
            <mui:Link x:Name="SystemMessagesLink" DisplayName="System Messages" Source="/Pages/Messages/SystemMessages.xaml" />
            <mui:Link x:Name="AccountSettingsLink" DisplayName="Account Settings" Source="/Pages/Admin/UserAccount.xaml" />
        </mui:ModernTab.Links>
    </mui:ModernTab>

如何使用WPF现代UI将数据绑定到菜单链接

您需要将ModernTab.Links绑定到视图模型中的链接集合中。

如果您不使用MVVM,您需要创建一个包含链接和更改后的显示名称的链接集合,并将此链接集合分配给您的ModernTab.links。

从坟墓里起来。。。。。

我刚刚遇到了这个问题,其实还不算太糟。标题链接(如框架顶部的设置)和实际菜单都是依赖属性,可以绑定到Viewmodel中。

以下是我的申报方式-

private LinkGroupCollection _menuLinkGroups = new LinkGroupCollection();
public LinkGroupCollection MenuLinkGroups
{
    get => _menuLinkGroups;
    set => SetProperty(ref _menuLinkGroups, value);
}
private LinkCollection _titleLinks = new LinkCollection();
public LinkCollection TitleLinks
{
    get => _titleLinks;
    set => SetProperty(ref _titleLinks, value);
}

然后我可以像这样填充它们-

private void ConstructLinks()
{
    if (MenuLinkGroups.Any())
    {
        MenuLinkGroups.Clear();
        TitleLinks.Clear();
    }
    var group = new LinkGroup {DisplayName = "Home"};
    var link = new Link { DisplayName = "Home", Source = MenuLinks.Home };
    group.Links.Add(link);
    MenuLinkGroups.Add(group);
    group = new LinkGroup{DisplayName = "Menu 1"};
    link = new Link {DisplayName = "Menu Item 1", Source = MenuLinks.Item1};
    group.Links.Add(link);
    link = new Link {DisplayName = "Menu Item 2", Source = MenuLinks.Item2};
    group.Links.Add(link);
    MenuLinkGroups.Add(group);

    group = new LinkGroup { DisplayName = "Menu 2" };
    link = new Link { DisplayName = "Menu Item3", Source = MenuLinks.Item3 };
    group.Links.Add(link);
    link = new Link {DisplayName = "Menu Item 4", Source = MenuLinks.Item4};
    group.Links.Add(link);
    MenuLinkGroups.Add(group);
    // Settings
    link = new Link { DisplayName = "Settings", Source = MenuLinks.Settings };
    TitleLinks.Add(link);
}

MenuLinks类只是一个静态类,它包含视图的各种URI。

最后将它们绑定到XAML中。

<mui:ModernWindow x:Class="MyApp.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:mui="http://firstfloorsoftware.com/ModernUI"
                  xmlns:prism="http://prismlibrary.com/"
                  prism:ViewModelLocator.AutoWireViewModel="True"
                  Title="{Binding Title}" IsTitleVisible="True"
                  ContentSource="/Views/Introduction.xaml"
                  Width="800" Height="700" WindowState="Maximized" SizeToContent="Manual"
                  TitleLinks ="{Binding TitleLinks}"
                  MenuLinkGroups ="{Binding MenuLinkGroups}">
</mui:ModernWindow>

值得指出的是,ContentSource也是一个依赖属性,因此您也可以绑定它。如果你喜欢一个小的贫民区导航,那就是.