1

ほとんどのコンバーターはパラメーターを受け取らないか、1つの固定パラメーターを取り、以下にバインドするのは簡単です。

<local:MyConverter x:Key="MyConverterInstance" />

<TextBox Text="{Binding Path=MyTime, 
                        Converter={StaticResource MyConverterInstance},
                        ConverterParameter='yyyy/MM/dd'}" />

しかし、その形式をユーザーが変更できる動的プロパティにしたい場合は、このようなことはできませんよね?:

<TextBox Text="{Binding Path=MyTime, 
                        Converter={StaticResource MyConverterInstance},
                        ConverterParameter={Binding Path=UserFormat}}" />

したがって、私の唯一のオプションは、バインディング用にMyConverterにDependencyPropertyを定義することです。しかし、私のコンバーター定義はStaticResourceです。行けない

<local:MyConverter x:Key="MyConverterInstance" 
                   Format="{Binding Path=UserFormat}"/>

StaticResourcesにはDataContextがないためです。どうすればこれを設定できますか?

4

1 に答える 1

5

コンバーターパラメーターにバインドすることはできませんが、代わりにマルチバインディングを使用できます。例: http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings またはこれを単に ConverterParameter にバインドする方法は?

(Alain) そのリンクされた回答を、この質問に一致するものに翻訳するだけです:

<TextBlock>
    <TextBlock.Resources>
        <local:MyConverter x:Key="MyConverterInstance" />
    </TextBlock.Resources>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource converter}">
            <Binding Path="MyTime" />
            <Binding Path="UserFormat" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

public class MyConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter,
      System.Globalization.CultureInfo culture)
  {
    DateTime time = (DateTime)values[0];
    string format = values[1].ToString();
    return time.ToString(format);
  }

  public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
      System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }
}
于 2012-05-02T23:53:57.787 に答える