首页 > 其他分享 >WPF关联Mvvm

WPF关联Mvvm

时间:2024-04-19 23:33:56浏览次数:29  
标签:return Mvvm 关联 var new WPF data public

WPF在不使用任何框架去关联View和ViewModel的时候,最常用的2种写法是

this.DataContext=new MainViewModel();

或者
 <Window.DataContext>
     <viewModels:MainWindowViewModel/>
 </Window.DataContext>

而之所以使用模板不起作用,是因为模板是针对UserControl的,例如

  <DataTemplate DataType="{x:Type viewModels:HomeViewModel}">
      <views:HomeView />
  </DataTemplate>

要想使上面代码关联成功,那么HomeView必须是UserControl,
而唯一让我感觉吃惊的是AvaloniaUi组件库的使用,它源码使用了非常可观的方式去关联数据
这个和Prism异曲同工,都是配置大于约定,
prism配置方式如下

  xmlns:prism="http://prismlibrary.com/"
  prism:ViewModelLocator.AutoWireViewModel="true"

AvaloniaUi
方式如下:
资源字典

 <Application.DataTemplates>
        <local:ViewLocator />
 </Application.DataTemplates>

配置代码

  public class ViewLocator
  {
      public static Control? Build(object? data)
      {
          if (data is null)
              return null;

          var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
          var type = Type.GetType(name);

          if (type != null)
          {
              var control = (Control)Activator.CreateInstance(type)!;
              control.DataContext = data;
              return control;
          }

          return new Control();
      }

  }

启动代码

public class Program
{
    [STAThread]
    public static void Main(string[] args) 
    {
        Application app = new Application();
        MainViewModel viewModel = new MainViewModel();
        var main= ViewLocator.Build(viewModel) as Window;
        app.Run(main);
    }     
}

标签:return,Mvvm,关联,var,new,WPF,data,public
From: https://www.cnblogs.com/guchen33/p/18147004

相关文章

  • WPF livecharts
    1.Installlivecharts.wpfinnuget2.usercontrol//xaml<UserControlx:Class="WpfApp64.Bar"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx......
  • WPF多表头表格实现
    前言多表头表格是一个常见的业务需求,然而WPF中却没有默认实现这个功能,得益于WPF强大的控件模板设计,我们可以通过修改控件模板的方式自己实现它。一、需求分析  下图为一个典型的统计表格,统计1-12月的数据。   此时我们有一个需求,需要将月份按季度划分,以便能够直观地......
  • WPF项目使用日志
    提问WPF项目如何使用日志回答引入nugetlog4net加入配置特性[assembly:ThemeInfo(ResourceDictionaryLocation.None,//wherethemespecificresourcedictionariesarelocated//(usedifaresourceisnotfoundinthepage,//orapplicationresourcedict......
  • WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中
    实现的效果如果你对此感兴趣,可以接着往下阅读。实现过程绘制矩形比如说我想绘制一个3行4列的表格:privatevoidButton_Click_DrawRect(objectsender,RoutedEventArgse){intRow=3;intCol=4;for(inti=0;i<Row;i++){......
  • 界面组件库DevExpress Office File API(WinForms & WPF)v24.1新功能预览
    本文描述了界面组件库DevExpress的OfficeFileAPI(WinForms&WPF)和受Office启发的控件在v24.1中发布的一些功能,并详细介绍了我们当前的抢先体验预览版本v24.1中的内容。DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress......
  • 【转载】清空WPF自带样式,以及透明按钮
    原文:https://www.cnblogs.com/Cindys/archive/2012/09/11/2680501.html空样式按钮<Stylex:Key="EmptyButtonStyle"TargetType="Button">           <SetterProperty="Padding"Value="0"/>           <SetterProper......
  • 【转】[C#][WPF] GridControl 列宽控制
    在设置DevExpress里的GridControl自动列宽时,有两个方式:view.BestFitColumn(gridColumn);view.BestFitColumns();但我想要达到这样的效果:1、加载配置,读取列宽2、未配置列宽的列自动列宽发现可以这样组合://如果已配置列宽,自动列宽就是配置的宽度if(gridColumn.Widt......
  • 界面组件Telerik UI for WPF 2024 Q1新版亮点 - 全新DateRangePicker组件
    TelerikUIforWPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UIforWPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成VisualStudio工具箱中。本文将介绍界面组件TelerikUIforWPF在今......
  • WPF 虚拟化
    1通用部分可以参考 优化控件性能-WPF.NETFramework|MicrosoftLearn主要的设置是<SetterProperty="VirtualizingPanel.IsVirtualizing"Value="True"/><SetterProperty="VirtualizingPanel.VirtualizationMode"Value="Recycling&quo......
  • WPF 使用CommunityToolkit.Mvvm进行快速开发
    一、Net框架情况下:NuGet安装CommunityToolkit.Mvvm使用框架可以简洁快速的编辑代码MvvmFoundationViewModel.cs文件内MvvmFoundationViewModel继承ObservableObject属性上添加[ObservableProperty]属性名称第一个字母不要大写,框架会自动生成大写的字段点击查看代码......