C# 将转换器绑定到转换器工厂
我一直在试图找到一种方法,将转换器绑定到返回转换器的属性 我的代码看起来像这样 我有课C# 将转换器绑定到转换器工厂,c#,wpf,C#,Wpf,我一直在试图找到一种方法,将转换器绑定到返回转换器的属性 我的代码看起来像这样 我有课 public class ConverterFactory { public IValueConverter AuthorizationToEnabledConverter { get { return converter...... } } } 我有一个
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"}"
编辑:无法绑定绑定的转换器
-属性,因为它不是依赖属性
。另一种方法是创建自定义标记扩展名
,如下所示:
[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>
你想做什么?也许他们是一个不同的,更简单的方法来做这件事。工厂的目的是什么?工厂的目的是我没有一个类与我所有的转换器。一些转换器具有注入点,这些注入点通过unity进行解析。我无法让ctor注入与xaml一起工作,所以我为此建立了一个工厂。我无法让它工作。。我有这样一个属性:IsEnabled=“{Binding”Value”,Converter=“{Binding Source={StaticResource ConterterFactory},Path=“AuthorizationToEnabledConverter”}”,所以应该将转换器绑定到它class@user2806381转换器
不是从属属性
。这就是为什么不能在转换器
属性上设置任何绑定。请查看“我的编辑”以获得其他选项。@user2806381如果它解决了您的问题,请将此项标记为答案。;)