如何使用WPF Modern-UI对菜单链接进行数据绑定

时间:2015-11-09 23:36:36

标签: c# wpf data-binding modern-ui

我正在学习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>

2 个答案:

答案 0 :(得分:0)

您需要将ModernTab.Links绑定到viewmodel中的链接集合中。

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

答案 1 :(得分:0)

从坟墓中崛起.....

我刚遇到这个问题,实际上还不错。标题链接(如框架顶部的设置之类的小链接)和实际菜单都是依赖项属性,可以绑定到您的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也是一个依赖项属性,因此您也可以绑定它。如果您喜欢一点贫民区导航,那就是。