我使用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=...}
,上面的代码无法编译,在这种情况下如何使用转换器?
答案 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>