扩展 XamlCompiler 以将字符串反序列化为集合

Extending XamlCompiler to deserialize string to collection

在通用 Windows 应用程序的上下文中,我有以下 class(位于 .NET Standard 库中):

public class Store
{
     ICollection<string> Products { get; set; } = new List<string>();
}

及以下XAML

<DataContext>
     <local:Store Products="Banana, Orange, Lemmon">
<DataContext>

显然,当我编译它时,XamlCompiler 抱怨因为它不知道如何将字符串转换为 ICollection

我的问题是:

有没有办法扩展 XamlCompiler 使其学习 如何将逗号分隔的字符串转换为 ICollection<string>

我看到有一个编译时属性: CreateFromStringAttribute,但我无法在我的 Store class 中使用,因为它位于 .NET Standard class 库中。

据我所知,UWP XamlCompiler 仅支持 CreateFromStringAttribute。

在 WPF 中,您将使用 TypeConverterAttribute 和 TypeConverter 将字符串转换为集合。但是 UWP 的 XamlCompiler 会忽略 TypeConverterAttribute。这样做的一个原因是因为 UWP 依赖于 WinRT API,并且类型转换之类的东西需要在没有 .NET 的情况下工作。 .NET 和 C# 只是构建 UWP 应用程序的一种方式。

当我创建 XAML:具有 "Understanding XAML Type Conversion" 模块的 Pluralsight 入门课程时,我已经更详细地研究了该转换(请参阅此处 https://www.pluralsight.com/courses/xaml-getting-started)。我在那里展示了两种方式,CreateFromStringAttribute 和 TypeConverterAttribute。

您可以在 Tim 的 post 中阅读有关 UWP 为什么使用另一个属性的更多信息:https://timheuer.com/blog/implement-type-converter-uwp-winrt-windows-10-xaml/

这对你意味着什么?

您不能只创建 .NET Standard class 库。或者换句话说,如果您想在库中进行该转换,则不能仅以 .NET Standard 为目标。您必须是多目标并且 UWP 需要是一个目标,否则您将得不到 CreateFromStringAttribute,目前没有其他方法可以连接到该转换。

希望对您有所帮助, 托马斯