gpt4 book ai didi

wpf - 转换器的生命周期是多长?

转载 作者:行者123 更新时间:2023-12-02 01:47:56 28 4
gpt4 key购买 nike

转换器的生命周期是怎样的?
当您创建从 IValueConverterIMultiValueConverter 派生的转换器时,该类不是静态的,Convert()ConvertBack() 也不是静态的 函数。那么该类实例的生命周期是多少?
如果我在多个 Binding 中使用 XAML 中的转换器,是否会为每个控件创建该类的新实例?或者每次更新 Binding 时都会创建该类的新实例?或者整个应用程序可能只有一个实例?

最佳答案

转换器的生命周期通常与任何 XAML 对象实例相同,并且取决于声明。通常转换器被声明为 ResourceDictionary 的资源:

<Window.Resources>
<BooleanToVisibilityConverterx:Key="BooleanToVisibilityConverter" />
</Window.Resources>

在这种情况下,转换器(或一般的资源)将被重用于每次对其的引用。这是因为x:Shared属性。默认情况下,此属性为 true,它指示 XAML 解析器重用该对象的实例。您可以将其显式设置为 false:

<Window.Resources>
<BooleanToVisibilityConverterx:Key="BooleanToVisibilityConverter" x:Shared="False" />
</Window.Resources>

现在,每次引用资源时,XAML 解析器都会创建一个新实例。

如果在 ResourceDictionary 外部声明该对象,XAML 解析器的行为会有所不同。您可以将对象实例作为资源分配给上面的属性。但您也可以使用 Property Element Syntax相反,实例化 XAML 对象:

<Binding Path="Values">
<Binding.Converter>
<BooleanToVisibilityConverter />
</Binding.Converter>
</Binding>

此声明产生一个转换器实例,该实例仅用于此特定绑定(bind)(或属性)。此声明不引用资源(使用 StaticResource or DynamicResource ),但显式创建一个专门分配给属性的实例(在本例中为 Binding.Converter)。

附注:
StaticResource并不意味着资源是静态的。它是一个标记扩展,指示 XAML 解析器查找资源树以查找预定义实例。 DynamicResource 也是如此。唯一的区别是,StaticResource 指示 XAML 解析器在编译时解析对资源的引用,而 DynamicResource 让 XAML 解析器创建一个表达式,该表达式将被计算在运行时。因此,DynamicResource 在运行时解析资源。

关于wpf - 转换器的生命周期是多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56961736/

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