找回密码
 立即注册

QQ登录

只需一步,快速开始

Maxxx

注册会员

3

主题

8

帖子

21

积分

注册会员

积分
21
最新发帖
Maxxx
注册会员   /  发表于:2024-3-29 14:45  /   查看:2046  /  回复:8
本帖最后由 Maxxx 于 2024-3-29 14:46 编辑

已知通过XAML可以绘制Ribbon,以下是通过XAML实现的效果

  1.         <c1:C1Ribbon x:Name="C1RibbonAuto" Grid.Row="1" SelectedIndex="0" Background="LightBlue">
复制代码

如果使用MVVM模式,如何使用通过ViewModel自动生成菜单?下面这种定义方式,TabItem,Group,Button分别定义一个Model,然后重新设计C1Ribon的模板?
  1. <blockquote>class MenuViewModel
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

8 个回复

倒序浏览
Maxxx
注册会员   /  发表于:2024-3-29 14:48:28
沙发
  1. class MenuViewModel
  2. {
  3.     public string Header { get; set; }
  4.     public ObservableCollection<TabItemModel> TabItems { get; set; } = new ObservableCollection<TabItemModel>();

  5.     public MenuViewModel2()
  6.     {
  7.         var btn1 = new ButtonModel("btn11");
  8.         var btn2 = new ButtonModel("btn22");
  9.         var btn3 = new ButtonModel("btn33");

  10.         var group = new GroupModel("Group1");
  11.         group.ButtonModels.Add(btn1);
  12.         group.ButtonModels.Add(btn2);
  13.         group.ButtonModels.Add(btn3);

  14.         var tab = new TabItemModel("Tab1111");
  15.         TabItems.Add(tab);
  16.     }

  17.     public class TabItemModel
  18.     {
  19.         public ObservableCollection<GroupModel> GroupModels { get; set; } = new ObservableCollection<GroupModel>();

  20.         public string Header { get; set; }

  21.         public TabItemModel(string name)
  22.         {
  23.             Header = name;
  24.         }
  25.     }

  26.     public class GroupModel
  27.     {
  28.         public ObservableCollection<ButtonModel> ButtonModels { get; set; } = new ObservableCollection<ButtonModel>();
  29.         public string Header { get; set; }
  30.         public GroupModel(string name)
  31.         {
  32.             Header = name;
  33.         }
  34.     }

  35.     public class ButtonModel
  36.     {
  37.         public string Name { get; set; }

  38.         public ButtonModel(string name)
  39.         {
  40.             Name = name;
  41.         }
  42.     }
  43. }
复制代码
回复 使用道具 举报
Maxxx
注册会员   /  发表于:2024-3-29 15:09:33
板凳
重新上传一下ViewModel和View的代码,显示有问题:
  1. <c1:C1Ribbon Grid.Row="0" x:Name="MyRibbon" Background="LightGoldenrodYellow"
  2.               ItemsSource="{Binding Tabs}" SelectedIndex="0">
  3.     <c1:C1Ribbon.ItemTemplate>
  4.         <DataTemplate>
  5.             <c1:RibbonTabItem Header="{Binding Header}">
  6.                 <c1:RibbonTabItem.ContentTemplate>
  7.                     <DataTemplate>
  8.                         <ItemsControl ItemsSource="{Binding Groups}">
  9.                             <ItemsControl.ItemTemplate>
  10.                                 <DataTemplate>
  11.                                     <c1:RibbonGroup Header="{Binding Header}">
  12.                                         <ItemsControl ItemsSource="{Binding Buttons}">
  13.                                             <ItemsControl.ItemTemplate>
  14.                                                 <DataTemplate>
  15.                                                     <c1:C1ButtonTool Label="{Binding Label}"/>
  16.                                                 </DataTemplate>
  17.                                             </ItemsControl.ItemTemplate>
  18.                                         </ItemsControl>
  19.                                     </c1:RibbonGroup>
  20.                                 </DataTemplate>
  21.                             </ItemsControl.ItemTemplate>
  22.                         </ItemsControl>
  23.                     </DataTemplate>
  24.                 </c1:RibbonTabItem.ContentTemplate>
  25.             </c1:RibbonTabItem>
  26.         </DataTemplate>
  27.     </c1:C1Ribbon.ItemTemplate>
  28. </c1:C1Ribbon>
复制代码

  1. public class RibbonViewModel
  2. {
  3.     public ObservableCollection<RibbonTabViewModel> Tabs { get; set; } = new ObservableCollection<RibbonTabViewModel>();

  4.     public RibbonViewModel()
  5.     {
  6.         // Initialize tabs
  7.         Tabs.Add(new RibbonTabViewModel("Tab1"));
  8.         Tabs.Add(new RibbonTabViewModel("Tab2"));
  9.         // Add more tabs if needed
  10.     }
  11. }

  12. public class RibbonTabViewModel
  13. {
  14.     public string Header { get; set; }
  15.     public ObservableCollection<RibbonGroupViewModel> Groups { get; set; } = new ObservableCollection<RibbonGroupViewModel>();

  16.     public RibbonTabViewModel(string header)
  17.     {
  18.         Header = header;
  19.         // Initialize groups
  20.         Groups.Add(new RibbonGroupViewModel("Group1"));
  21.         Groups.Add(new RibbonGroupViewModel("Group2"));
  22.         // Add more groups if needed
  23.     }
  24. }

  25. public class RibbonGroupViewModel
  26. {
  27.     public string Header { get; set; }
  28.     public ObservableCollection<ButtonViewModel> Buttons { get; set; } = new ObservableCollection<ButtonViewModel>();

  29.     public RibbonGroupViewModel(string header)
  30.     {
  31.         Header = header;
  32.         // Initialize buttons
  33.         Buttons.Add(new ButtonViewModel("Button 1"));
  34.         Buttons.Add(new ButtonViewModel("Button 2"));
  35.         Buttons.Add(new ButtonViewModel("Button 3"));
  36.         Buttons.Add(new ButtonViewModel("Button 4"));
  37.         // Add more buttons if needed
  38.     }
  39. }

  40. public class ButtonViewModel
  41. {
  42.     public string Label { get; set; }
  43.     public ICommand Command { get; set; }

  44.     public ButtonViewModel(string label)
  45.     {
  46.         Label = label;
  47.         // Initialize command if needed
  48.     }
  49. }
复制代码
回复 使用道具 举报
Maxxx
注册会员   /  发表于:2024-3-29 15:11:02
地板

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-31 00:18:14
5#
我看你实际上在xaml中通过itemtempate 完全重写了ribbon,导致样式基本都没有了。

ribbon的每个tab里面的元素类型很多,这个控件本身没有设计这样的用例。我周一帮你看看是否可能实现。
回复 使用道具 举报
Maxxx
注册会员   /  发表于:2024-3-31 11:25:27
6#
Richard.Ma 发表于 2024-3-31 00:18
我看你实际上在xaml中通过itemtempate 完全重写了ribbon,导致样式基本都没有了。

ribbon的每个tab里面 ...

好的,谢谢。我又试了下,好像也不支持HierarchicalDataTemplate。最终目的是通过使用类似XML的配置文件,根据配置里的层级关系,自动生产Ribbon菜单,这样可以灵活布置不同用户有哪些功能,以及对应的布局。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-1 15:27:09
7#
内部确认了一下,控件设计的时候确实没有考虑过这样的使用场景。没有办法和grid,chart等数据组件一样进行复杂的数据绑定
回复 使用道具 举报
Maxxx
注册会员   /  发表于:2024-4-1 15:52:25
8#
Richard.Ma 发表于 2024-4-1 15:27
内部确认了一下,控件设计的时候确实没有考虑过这样的使用场景。没有办法和grid,chart等数据组件一样进行 ...

好吧,那就换个思路了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-1 15:59:30
9#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部