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

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

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

<TargetFramework>net6.0</TargetFramework>
<OutputType>Library</OutputType>
<LangVersion>10.0</LangVersion>
<Nullable>enable</Nullable>

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

mklgxw1f

mklgxw1f1#

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

namespace SampleClassLibrary
{
    public class SampleModel
    {
        public string Name { get; set; } = string.Empty;
        public string Description { get; set; } = string.Empty;
    }
}

1.将库添加到解决方案

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

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

2.添加库作为COM引用

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

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

3.使用库类型

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

using CommunityToolkit.Mvvm.ComponentModel;
using SampleClassLibrary;

namespace MauiWithDll;

public class MainViewModel : ObservableObject
{
    // SampleModel is defined in the SampleClassLibrary
    private SampleModel _sampleModel;
    public SampleModel SampleModel
    {
        get => _sampleModel;
        set => SetProperty(ref _sampleModel, value);
    }

    public MainViewModel()
    {
        SampleModel = new SampleModel
        {
            Name = "Jack Sparrow",
            Description = "Pirate"
        };
    }
}

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

查看代码隐藏:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        BindingContext = new MainViewModel();
    }
}

查看XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
  xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  xmlns:mauiWithDll="clr-namespace:MauiWithDll"
  x:DataType="mauiWithDll:MainViewModel"
  x:Class="MauiWithDll.MainPage">

  <VerticalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">

    <Label Text="{Binding SampleModel.Name}" />
    <Label Text="{Binding SampleModel.Description}" />

  </VerticalStackLayout>

</ContentPage>

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

相关问题