.net 如何在MAUI模型中使用遗留C#库类对象

flmtquvp  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(244)

我们在遗留的C#库中定义了一些类,我们需要将它们用作MAUI应用程序中的视图模型。
我们已经查阅了许多资料,但许多人建议创建一个MAUI库,这对我们来说是不可能的,因为它是一个已经定义良好并经过测试的对象库。
该库不仅用于各种平台上的应用程序,还用于Linux,Windows和MacOS上的C#应用程序。
我们已经将其添加到Dependencies中,
我们必须将其转换为NuGet包吗?
我们应该如何以及在哪里放置一些指示(在视图cs和/或XAML文件中?,在应用程序cs和/或XAML文件中?,其他?)来绑定视图中C#库中的对象?
提前感谢,这可能不是那么困难,但我们开始使用MAUI,我们有点卡在这里。
对象库组件刚刚升级到**.NET 6.0**(它是最后一个可用的LTS),因此它不再是旧库。

  1. <TargetFramework>net6.0</TargetFramework>
  2. <OutputType>Library</OutputType>
  3. <LangVersion>10.0</LangVersion>
  4. <Nullable>enable</Nullable>

但是如何在视图中绑定来自C#库的对象的问题仍然存在。

mklgxw1f

mklgxw1f1#

为了使用一个类库(.dll),它的目标是一个小于或等于你的MAUI项目版本的.NET版本,你可以简单地将它添加为COM引用,然后通过以下三个简单的步骤使用库中定义的数据类型。
在这个例子中,我使用了一个名为“SampleClassLibrary.dll”的简单类库,它只包含一个名为SampleModel的类,位于SampleClassLibrary命名空间中:

  1. namespace SampleClassLibrary
  2. {
  3. public class SampleModel
  4. {
  5. public string Name { get; set; } = string.Empty;
  6. public string Description { get; set; } = string.Empty;
  7. }
  8. }

1.将库添加到解决方案

首先,你应该决定图书馆应该在哪里。理想情况下,这是一个位置,您还可以添加其他外部库,这些库不是通过NuGet添加的。我通常为这些依赖项创建一个单独的文件夹,然后将库添加到解决方案中的该文件夹中:

根据链接器设置和其他因素,您可能希望将库复制到输出目录,但这不是绝对必要的:

2.添加库作为COM引用

接下来,您需要右键单击项目上的“Dependencies”并选择“Add COM Reference”。在下面的对话框中,浏览到库的位置,并选中它:

一旦你选择了库,点击“确定”,你就可以开始了。

3.使用库类型

现在,您可以在MAUI项目中使用SampleModel类作为模型,例如:在ViewModel中添加一个using语句,从库中拉入名称空间。

  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using SampleClassLibrary;
  3. namespace MauiWithDll;
  4. public class MainViewModel : ObservableObject
  5. {
  6. // SampleModel is defined in the SampleClassLibrary
  7. private SampleModel _sampleModel;
  8. public SampleModel SampleModel
  9. {
  10. get => _sampleModel;
  11. set => SetProperty(ref _sampleModel, value);
  12. }
  13. public MainViewModel()
  14. {
  15. SampleModel = new SampleModel
  16. {
  17. Name = "Jack Sparrow",
  18. Description = "Pirate"
  19. };
  20. }
  21. }

现在,您可以使用bind to the data来实现您的MAUI应用:

查看代码隐藏:

  1. public partial class MainPage : ContentPage
  2. {
  3. public MainPage()
  4. {
  5. InitializeComponent();
  6. BindingContext = new MainViewModel();
  7. }
  8. }

查看XAML:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <ContentPage
  3. xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  5. xmlns:mauiWithDll="clr-namespace:MauiWithDll"
  6. x:DataType="mauiWithDll:MainViewModel"
  7. x:Class="MauiWithDll.MainPage">
  8. <VerticalStackLayout
  9. Spacing="25"
  10. Padding="30,0"
  11. VerticalOptions="Center">
  12. <Label Text="{Binding SampleModel.Name}" />
  13. <Label Text="{Binding SampleModel.Description}" />
  14. </VerticalStackLayout>
  15. </ContentPage>

请注意,如果模型类实现了 INotifyPropertyChanged 接口,则任何到外部库类对象的绑定都将仅在MAUI项目中自动更新。

展开查看全部

相关问题