【问题标题】:Extending XamlCompiler to deserialize string to collection扩展 XamlCompiler 以将字符串反序列化为集合
【发布时间】:2020-04-14 18:40:00
【问题描述】:

在通用 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&lt;string&gt;

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

【问题讨论】:

    标签: c# .net xaml uwp win-universal-app


    【解决方案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 的帖子中阅读更多关于 UWP 为何使用另一个属性的信息:https://timheuer.com/blog/implement-type-converter-uwp-winrt-windows-10-xaml/

    这对你意味着什么?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2021-01-08
      • 1970-01-01
      • 2020-05-20
      • 2012-08-15
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多