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

问题描述 投票:1回答:1

在通用Windows应用程序的上下文中,我有以下类(位于.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类中使用,因为它位于.NET Standard类库中。

.net xaml uwp win-universal-app
1个回答
1
投票

AFAIK UWP XamlCompiler仅支持CreateFromStringAttribute。

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

我创建XAML:Pluralsight入门课程,其中包含“了解XAML类型转换”模块(请参见https://www.pluralsight.com/courses/xaml-getting-started),已经更详细地研究了该转换。在那里我展示了两种方法,CreateFromStringAttribute和TypeConverterAttribute。

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

这对您意味着什么?

您不能仅创建.NET Standard类库。换句话说,如果您想在库中进行该转换,则不能仅将.NET Standard作为目标。您必须具有多个目标,并且UWP需要成为目标,否则您将无法获得CreateFromStringAttribute,并且目前没有其他方法可以挂接到该转换中。

我希望这会有所帮助,托马斯

© www.soinside.com 2019 - 2024. All rights reserved.