扩展 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,目前没有其他方法可以连接到该转换。
希望对您有所帮助,
托马斯
在通用 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,目前没有其他方法可以连接到该转换。
希望对您有所帮助, 托马斯