gpt4 book ai didi

c# - 访问 MarkupExtension.ProvideValue 中的构造函数参数

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:41 26 4
gpt4 key购买 nike

我有 MyListYExtension 没有默认构造函数的标记扩展。因此它只能用构造函数语法创建。另一个 GetValueExtension 标记扩展试图确定所请求值的目标类型,以便它可以进行必要的转换。例如,如果您将第二个扩展的值分配给 Double 类型的属性,GetValueExtension 会理解它并返回 2.0 而不是“2”。虚拟示例:

{MyListX Capacity={GetValue ListCapacityParam}}    

如果我将 GetValueExtension 分配给属性,一切都会顺利进行。然后目标类型可以在 MarkupExtension.ProvideValue 中通过

访问
((IProvideValueTarget)serviceProvider).TargetProperty.PropertyType

但是当我将 GetValueExtension 用作 MyListYExtension 的构造函数的参数时,TargetProperty 为空:

<!-- no default constructor in MyListY -->
<!-- the first parameter of MyListY is "int capacity" -->
{MyListY {GetValue ListCapacityParam}}

当 XAML 解析器为属性赋值时,它会执行默认转换。但是当它从标记扩展中获取值时它不会这样做。它会导致无法分配的异常,例如字符串值到 double 属性。为避免这种情况,我尝试模拟默认转换,但为此需要知道目标类型。

我在 MarkupExtension.ProvideValue 调用中找不到任何解决方法来确定构造函数参数的实际类型

我可以修改 GetValueExtension 但不能修改 MyListYExtension

我该怎么做才能解决这个问题?

最佳答案

这看起来像是先有鸡还是先有蛋的问题。问题是构造函数可以重载,为了找到合适的构造函数,框架需要知道您试图传递给它的参数的类型。

换句话说,在调用 ProvideValue 时,不知道将使用什么构造函数,因此无法提供有关目标类型的信息。

关于c# - 访问 MarkupExtension.ProvideValue 中的构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com