使用转换器到DataTemplate中的TextBlock

时间:2015-02-27 08:14:43

标签: c# wpf

我使用ItemsControl

绑定字符串集合
<ItemsControl ItemsSource="{Binding MyCollection}">
     <ItemsControl.Template>
          <ControlTemplate>
                <ItemsPresenter/>
          </ControlTemplate>
     </ItemsControl.Template>
 <ItemsControl.ItemTemplate>
        <DataTemplate>
             <TextBlock Text="{Binding, Converter={local:MyTextConverter}}" />
        </DataTemplate>
 </ItemsControl.ItemTemplate>
 </ItemsControl>

由于语法{Binding, Converter=...},上面的代码无法编译,在这种情况下如何使用转换器?

2 个答案:

答案 0 :(得分:2)

您通常会将转换器声明为资源并执行StaticResource查找:

<Window.Resources>
    <local:MyTextConverter x:Key="MyTextConverter"/>
</Window.Resources>
...
<TextBlock Text="{Binding, Converter={StaticResource MyTextConverter}}" />

如果转换器派生自MarkupExtension并覆盖ProvideValue方法,则可以使其他语法有效。但这不常见。

public class MyTextConverter: MarkupExtension, IValueConverter
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
    ...
}

答案 1 :(得分:1)

尝试使用Converter="{StaticResource YourConverterKey}"并在您的资源中声明YourConverterKey,如下所示:

<Local:MyTextConverter x:Key="YourConverterKey"></Local:MyTextConverter>