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 进行绑定。但我的转换器定义是一个静态资源。我不能去

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

因为StaticResources 上没有DataContext。我该如何设置?

4

1 回答 1

5

您不能绑定到转换器参数,但可以使用 Multibinding 代替。例如:http ://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings 或如何简单地将其绑定到 ConverterParameter?

(阿兰)所以只是将链接的答案翻译成与这个问题相匹配的东西:

<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 回答