VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

使用WPF和.NETFramework4.7.2创建并配置C#项目,

一、创建 "WPF应用程序" 新项目

项目模板选择如下:

暂时随机填一个目标框架,待会改:

二、修改“目标框架”

双击“解决方案资源管理器”中<项目>CU-APP, 打开<项目工程文件>CU-APP.csproj,

修改目标框架TargetFramework为.net framework 4.7.2 ;  C#语言版本LangVersion 为 9.0

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <!--<TargetFramework>net5.0-windows</TargetFramework>-->
    <TargetFramework>net472</TargetFramework>
    <LangVersion>9.0</LangVersion>
    <RootNamespace>CU_APP</RootNamespace>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0" />
  </ItemGroup>

</Project>

三、安装Microsoft.Toolkit.Mvvm工具包

 "工具" -> "NuGet包管理器",“管理解决方案的NuGet程序包(N)”, 

或者,在解决方案管理器中,右击工程,然后选择“管理NuGet包”。搜索Microsoft.Toolkit.Mvvm,并安装它

在构建 WPF 项目时,整合 MaterialDesignThemes.MahApps、CefSharp.Wpf.NETCore 和 CommunityToolkit.Mvvm 是一种常见需求,尤其适用于需要现代 UI 设计、内嵌浏览器功能和高效 MVVM 实现的应用场景。以下是具体的整合步骤和技术要点: ### 1. 创建项目并配置目标框架 首先,确保项目使用合适的 .NET 版本。若选择 .NET Core 3.1 或 .NET 5/6,则可以充分利用 CefSharp.Wpf.NETCore 和 CommunityToolkit.Mvvm 的现代特性支持。对于项目文件,需要添加以下依赖和配置: ```xml <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net6.0</TargetFramework> <UseWPF>true</UseWPF> <LangVersion>9.0</LangVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" /> <PackageReference Include="MaterialDesignThemes.Wpf" Version="3.0.1" /> <PackageReference Include="CefSharp.Wpf.NETCore" Version="114.2.110" /> </ItemGroup> </Project> ``` 上述配置中,`TargetFramework` 设置为 `net6.0`,以支持 CefSharp 的 .NET Core 版本,同时启用 `LangVersion` 为 9.0,以支持 MVVM Toolkit 的源生成器功能[^2]。 ### 2. 集成 MaterialDesignThemes.MahApps 实现现代 UI MaterialDesignThemes.Wpf 提供了丰富的控件和样式,用于实现 Material Design 风格的界面。在 `App.xaml` 中引入主题资源: ```xml <Application.Resources> <Style TargetType="Button" BasedOn="{StaticResource MaterialDesignFlatButton}" /> </Application.Resources> ``` 同时,在 `MainWindow.xaml` 或其他页面中直接使用控件: ```xml <Window x:Class="MyApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="800"> <Grid> <Button Content="Click Me" Style="{StaticResource MaterialDesignFlatButton}" /> </Grid> </Window> ``` 此步骤确保了界面具备现代视觉风格,并与 WPF 原生控件无缝融合[^4]。 ### 3. 使用 CefSharp.Wpf.NETCore 嵌入浏览器控件 CefSharp.Wpf.NETCore 允许在 WPF 应用中嵌入 Chromium 浏览器。在 `MainWindow.xaml` 中添加浏览器控件: ```xml <Window x:Class="MyApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf.NETCore" Title="MainWindow" Height="450" Width="800"> <Grid> <cef:ChromiumWebBrowser Address="https://www.example.com" /> </Grid> </Window> ``` 在 `MainWindow.xaml.cs` 中初始化 CEF 环境(通常在 `App.xaml.cs` 中进行全局初始化): ```csharp public partial class App : Application { public App() { Cef.Initialize(new CefSettings()); } } ``` 该配置确保应用能够加载并渲染网页内容,适用于需要嵌入 Web UI 的场景[^3]。 ### 4. 使用 CommunityToolkit.Mvvm 实现 MVVM 模式 MVVM 模式通过数据绑定和命令机制实现 UI 与业务逻辑的分离。定义一个 ViewModel 并绑定到视图: ```csharp using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; public class MainWindowViewModel : ObservableObject { private string _url; public string Url { get => _url; set => SetProperty(ref _url, value); } public RelayCommand NavigateCommand { get; } public MainWindowViewModel() { Url = "https://www.example.com"; NavigateCommand = new RelayCommand(OnNavigate); } private void OnNavigate() { // 执行导航逻辑 } } ``` 在 `MainWindow.xaml` 中绑定 ViewModel: ```xml <Window.DataContext> <local:MainWindowViewModel /> </Window.DataContext> ``` 通过此方式,可以将 UI 逻辑与业务逻辑解耦,提升代码的可测试性和可维护性[^1]。 ### 5. 处理异步初始化和设计器兼容性 在使用 MVVM 模式时,若 ViewModel 中涉及异步操作,需特别注意 Visual Studio 设计器的行为。设计器会在打开时缓存 ViewModel 的构造逻辑,可能导致异步任务意外运行。建议将异步初始化逻辑延迟到视图加载完成后执行: ```csharp private async void OnLoaded(object sender, RoutedEventArgs e) { await InitializeAsync(); } ``` 此外,在 `App.xaml.cs` 中确保 CEF 的正确初始化,避免因异步加载导致的异常[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值