我一直试图找到一种方法将转换器绑定到返回转换器的属性。
我的代码看起来像这样。
我上课了。
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
的类中的属性。
有办法做到这一点吗?
答案 0 :(得分:0)
如下:
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
派生,然后为转换器添加新的DependencyProperty来实现自己的Binding
。现在,您为此属性创建一个ValueChangedCallback,并且每次更改时,都会设置原始转换器。