将转换器绑定到转换器的工厂
本文关键字:转换器 工厂 绑定 | 更新日期: 2023-09-27 18:32:19
我一直在尝试找到一种方法将转换器绑定到返回转换器的属性。
我的代码如下所示。
我有一堂课。
public class ConverterFactory
{
public IValueConverter AuthorizationToEnabledConverter
{
get
{
return converter......
}
}
}
我有一个包含资源的UserControl
和一个按钮。
<UserControl.Resources>
<ResourceDictionary>
<converter:ConverterFactory x:Key="ConverterFactory" b:IsDataSource="true"/>
<ObjectDataProvider x:Key="AutCon" ObjectInstance="{StaticResource ConverterFactory}"
MethodName="AuthorizationToEnabledConverter"/>
</ResourceDictionary>
</UserControl.Resources>
<Button IsEnabled="{Binding "Value" ,Converter={StaticResource AutCon}}" >Change</Button>
我希望能够将我的转换器绑定到某个返回IValueConverter
的类中的属性。
有没有办法做到这一点?
像这样的事情怎么样:
Binding b = new Binding("AuthorizationToEnabledConverter") { Source = this.FindResource("ConverterFactory")};
this.SetBinding(YourProperty, b);
或通过 XAML:
YourProperty="{Binding Source={StaticResource ConverterFactory}, Path="AuthorizationToEnabledConverter"}"
编辑:您无法绑定绑定的Converter
属性,因为它没有DependencyProperty
。另一种方法是创建自定义MarkupExtension
如下所示:
[MarkupExtensionReturnType(typeof(IValueConverter))]
public class ConverterDispenser:MarkupExtension
{
public IValueConverter MainConverter
{
get { return new TestConverter();}
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
//with the help of serviceProvider you can get information about the surrounding elements and maybe decide depending on those information which converter to return.
return MainConverter;
}
}
如何使用它:
<TextBox Text="{Binding Path=Source, Converter={local:ConverterDispenser}}""></TextBox>
另一种选择是通过从 Binding
派生来实现您自己的Binding
,然后为转换器添加新的 DependencyProperty。现在,您为此属性创建一个 ValueChangedCallback,每次它更改时,您都设置原始转换器。