MahApps.Metro的MVVM模式介绍(一)

MahApps.Metro是一个开源的WPF (Windows Presentation Foundation) UI 控件库它的特点有现代化设计主题定制响应式布局内置控件

而Mvvm模式的核心思想是将用户界面(View)与应用程序逻辑(ViewModel)分离,以实现更好的可维护性、可测试性和可扩展性

今天来介绍下MahApps.Metro项目是怎么使用mvvm模式的。

 MainWindow类扮演View角色:

 public partial class MainWindow : MetroWindow
 {
     private bool shutdown;
     private readonly MainWindowViewModel viewModel;
     private FlyoutDemo? flyoutDemo;

     public MainWindow()
     {
         this.viewModel = new MainWindowViewModel(DialogCoordinator.Instance);
         this.DataContext = this.viewModel;

         this.InitializeComponent();
     }
}

MainWindowViewModel类扮演了ViewModel 角色。

 public class MainWindowViewModel : ViewModelBase, IDataErrorInfo, IDisposable
 {
     private readonly IDialogCoordinator _dialogCoordinator;
     int? _integerGreater10Property = 2;
     private bool _animateOnPositionChange = true;

     public MainWindowViewModel(IDialogCoordinator dialogCoordinator)
     {
    ...
    }
}

先介绍一个单向绑定的属性-Theme列表

在MainWindow.xaml中

 <MenuItem Header="Theme"
          ItemContainerStyle="{StaticResource AppThemeMenuItemStyle}"
          <!-- 绑定到“AppThemes”属性,模式为“OneWa”即只从viewmodel向view传递一次数据 -->
          ItemsSource="{Binding AppThemes, Mode=OneWay}" />
...

在MainWindowViewModel.cs中

// AppThemes 定义为公开的属性拥有get,set访问器
 public List<AppThemeMenuData> AppThemes { get; set; }
// MainWindowViewModel的构造函数,这这里为AppThemes 填充数据
 public MainWindowViewModel(IDialogCoordinator dialogCoordinator)
{
    ... 
    this.AppThemes = ThemeManager.Current.Themes
                              .GroupBy(x => x.BaseColorScheme)... .ToList();
    ...
}

通过以上代码,就可以实现在Theme菜单栏里添加多个子菜单项了。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值