如何制作具有可绑定转换器参数的转换器



大多数转换器不带参数或一个固定参数,并且很容易绑定到:

<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 上定义一个用于绑定的依赖属性。但我的转换器定义是静态资源。我不能去

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

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

不能绑定到转换器参数,但可以改用多重绑定。例如:http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings或者如何简单地将其绑定到转换器参数?

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

<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();
  }
}

最新更新