金石之策(一)MVVM

1. 简介

2. 示例

示例下载地址:https://download.csdn.net/download/qq_43572400/88925141

  1. 创建C# WPF应用(.NET Framework)工程,WpfApp1
    在这里插入图片描述
    在这里插入图片描述

  2. 添加程序集 GalaSoft.MvvmLight
    在这里插入图片描述
    在这里插入图片描述

  3. 创建ViewModel文件夹,并创建MainWindowViewModel.cs、ViewModelLocator.cs文件
    在这里插入图片描述

MainWindowViewModel.cs为视图模型类,用于管理应用程序的主要逻辑

public class MainWindowViewModel : ViewModelBase
{
    public MainWindowViewModel()
    {
        Title = "主界面";
    }
    
    private string _Title;
    public string Title
    {
        get { return _Title; }
        set { Set(ref _Title, value); }
    }
}

ViewModelLocator.cs用于提供 MainWindowViewModel 的实例

public class ViewModelLocator
{
    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        SimpleIoc.Default.Register<MainWindowViewModel>();
    }
    public MainWindowViewModel MainWindow
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MainWindowViewModel>();
        }
    }
}
注意
① 定义的参数名必须与xml中path定义名一致
② return ServiceLocator.Current.GetInstance();指页面关闭后,页面参数保存在内存中,程序不关闭则参数一直存在
③ return New MainWindowViewModel(); 指每次打开一个新的页面
  1. 在App.xaml文件中,添加一个资源字典(ResourceDictionary)并定义一个名为"Locator"的静态资源:
<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <local:ViewModelLocator x:Key="Locator"  xmlns:local="clr-namespace:WpfApp1.ViewModel"/>
        </ResourceDictionary>
    </Application.Resources>
</Application>

在这里插入图片描述

  1. 在XAML中设置"MainViewModel"作为主窗口的DataContext,使用资源字典(ResourceDictionary)和ViewModelLocator来实现这一点
    MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="{Binding Title}" Height="450" Width="800">
    <Window.DataContext>
        <Binding Path="MainWindow" Source="{StaticResource Locator}"></Binding>
    </Window.DataContext>
    <Grid>
        
    </Grid>
</Window>

在这里插入图片描述
注意:Path定义的名称必须跟ViewModelLocator中声明的函数名一致,否则定义的*ViewModel.cs类不生效。

  1. 运行后MainWindowViewModel 设置的标题Title生效
    在这里插入图片描述

相关推荐

  1. 前端框架 MVVM

    2024-03-11 18:24:02       7 阅读
  2. Vue.jsMVVM设计模式

    2024-03-11 18:24:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 18:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 18:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 18:24:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 18:24:02       20 阅读

热门阅读

  1. C# 执行js 并获取js执行的结果

    2024-03-11 18:24:02       22 阅读
  2. 算法之对于算法的想法

    2024-03-11 18:24:02       22 阅读
  3. 【Docker】Nginx 容器化部署

    2024-03-11 18:24:02       25 阅读
  4. 【力扣每日一题】力扣299猜数字游戏

    2024-03-11 18:24:02       21 阅读
  5. 【贪心算法】摆动序列

    2024-03-11 18:24:02       24 阅读