gpt4 book ai didi

c# - 为什么我必须将自定义 ValueConverter 声明为 StaticResource 并绑定(bind)到资源,而不是绑定(bind)到它的类型?

转载 作者:行者123 更新时间:2023-11-30 16:13:33 26 4
gpt4 key购买 nike

给定这个类:

namespace My.App.Converters
{
[ValueConversion(typeof(bool?), typeof(Visibility))]
public class NullableBooleanToVisibilityConverter : IValueConverter
{
...
}
}

为什么我必须执行以下操作:

<UserControl ...
xmlns:converters="clr-namespace:My.App.Converters">
<UserControl.Resources>
<converters:NullableBooleanToVisibilityConverter x:Key="visibilityConverter" />
</UserControl.Resources>
...
<Button MinWidth="120" HorizontalAlignment="Left"
Visibility="{Binding BackButtonVisible, Converter={StaticResource visibilityConverter}}" />
...
</UserControl>

而不是能够做如下的事情:

<UserControl ...
xmlns:converters="clr-namespace:My.App.Converters">
...
<Button MinWidth="120" HorizontalAlignment="Left"
Visibility="{Binding BackButtonVisible, ConverterType={x:Type converters:NullableBooleanToVisibilityConverter}}" />
...
</UserControl>

考虑到我只想在我的应用中的一个地方使用这个特定的转换器,即这个特定的 UserControl

答案是否像“Microsoft 不想添加 ConverterType,如果您真的需要,您可以使用标记扩展自己完成”一样简单,还是有良好编程风格的原因这样做? (“可重用性”不适用于此示例。)

最佳答案

问题是您没有获得转换器的实例。要解决同样的问题,只需将转换器的静态实例添加到 NullableBooleanToVisibilityConverter 类中,就像这样

namespace My.App.Converters
{
[ValueConversion(typeof(bool?), typeof(Visibility))]
public class NullableBooleanToVisibilityConverter : IValueConverter
{
public static NullableBooleanToVisibilityConverter Instance = new NullableBooleanToVisibilityConverter();

/* Convert and ConvertBack methods */
}
}

编辑

我忘了提到在绑定(bind)中你还必须访问静态实例

<Button MinWidth="120" HorizontalAlignment="Left"
Visibility="{Binding BackButtonVisible, Converter={x:Static:NullableBooleanToVisibilityConverter.Instance}}" />

关于c# - 为什么我必须将自定义 ValueConverter 声明为 StaticResource 并绑定(bind)到资源,而不是绑定(bind)到它的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21576988/

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