0

コンバーターを返すプロパティにコンバーターをバインドする方法を見つけようとしています。

私のコードは次のようになります。

クラスがあります。

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

これを行う方法はありますか?

4

1 に答える 1

0

次のようなものはどうですか:

Binding b = new Binding("AuthorizationToEnabledConverter") { Source = this.FindResource("ConverterFactory")};
this.SetBinding(YourProperty, b);

または XAML 経由:

YourProperty="{Binding Source={StaticResource ConverterFactory}, Path="AuthorizationToEnabledConverter"}"

Converter編集: no であるため、バインディングの -property をバインドできませんDependencyPropertyMarkupExtension別の方法は、次のようなカスタムを作成することです。

[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>

もう 1 つの方法は、Bindingから派生させて独自に実装Bindingし、コンバーターに新しい DependencyProperty を追加することです。ここで、このプロパティの ValueChangedCallback を作成し、変更されるたびに元のコンバーターを設定します。

于 2013-09-23T08:50:09.427 に答える