如何从XAML中的代码访问转换器?

时间:2012-01-11 03:10:25

标签: wpf xaml converter

我在后面的代码中有一个名为StringToIntConverter的转换器我尝试在xaml绑定中使用它,其中s是项目命名空间:

Converter={s:StringToIntConverter}

但是它说它缺少一个程序集引用。我做错了什么?

我知道有一些方法可以将它作为资源然后引用资源,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:4)

<Some.Resources>
    <s:StringToIntConverter x:Key="StringToIntConverter"/>
</Some.Resources>
<!-- ... -->
Converter={StaticResource StringToIntConverter}

大括号表示markup extension ,它们不能随意用于实例化对象,但为方便起见,可以将转换器转换为标记扩展名。

类似的东西:

public class StringToIntConverter : MarkupExtension, IValueConverter
{
    //...

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}

然后你使用的代码就可以了!


另请注意,您可以使用XML元素语法中的绑定来实例化转换器,例如。

<TextBox>
    <TextBox.Text>
        <Binding Path="String">
            <Binding.Converter>
                <s:StringToIntConverter />
            </Binding.Converter>
        </Binding>
    </TextBox.Text>
</TextBox>

答案 1 :(得分:3)

嗯 - 如果我理解你的问题,通常情况会是这样的。你创建了一个转换器吗?在您的XAML中,您需要像这样添加对程序集的引用。

xmlns:converters="clr-namespace:Shared.Converters;assembly=Shared"

即使它在同一个组件中 - 类似......

xmlns:local="clr-namespace:ItemMaster"

现在您需要为要使用的转换器创建staticResource。

<converters:CostMethodToBooleanConverter x:Key="CostMethodToBooleanConverter"/>

然后你可以使用它。

IsEnabled="{Binding SelectedItem, Converter={StaticResource ReverseCostMethodToBooleanConverter}, ElementName=OemOriginalCostMethod}"/>

这有帮助吗?