如何使用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>
您需要将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也是一个依赖属性,因此您也可以绑定它。如果你喜欢一个小的贫民区导航,那就是.