绑定时无法添加转换器

时间:2015-07-12 21:53:01

标签: c# xaml converter

我已经实现了界面 IValueConverter ,如图here所示,我将现在放在与我的代码隐藏相同的文件中XAML(两个类,都在相同的命名空间中,但实现 IValueConverter 并继承 Window )。

public class BamseGurka : IValueConverter
{
  public object Convert(object v, Type t, object p, CultureInfo c) { ... }
  public object ConvertBack(object v, Type t, object p, CultureInfo c) { ... }
}

在XAML中,我添加了一个标签,其可见性与需要转换的结果相关联,如here - "how to use value converter in XAML"所示。

<Label Name="ErrorMessage" ...
       Visibility="{Binding Converter={StaticResource BamseConverter}}" >

由于我想要使用真正的自定义转换器,而不是微软预测的转换器(没有布尔,整数等),我需要参考我的实现(与例如 BoolToVisibilityConverter 相反)。我希望intellisense能给我很好的建议,但我最后在父元素(或窗口或应用程序)中添加了一个资源。

<StackPanel.Resources>
  <ComboCellBindingConverter x:Key="BamseConverter" />
</StackPanel.Resources>

这引发了两个问题 - 首先是为什么我会得到(以及是什么) ComboCellBindingConverter 。其次,我应该把它放在那里(因为那个符号无法解决,我还需要指向我的实现)?

偷偷摸摸,我试图规避如下,但这只会导致同样的错误。

<StackPanel.Resources>
  <BamseGurka x:Key="BamseConverter" />
</StackPanel.Resources>

使用intellisense,我在window标签和下面的设置中找到了一个新属性。

xmlns:blopp="clr-namespace:The.Actual.Namespace" ...

<StackPanel.Resources>
  <blopp:BamseGurka x:Key="BamseConverter" />
</StackPanel.Resources>

现在,它抱怨 BamseGurka 不在提到的命名空间中,这是一个大胆的谎言,因为它是!只是为了好玩,当我将 BamseGurka 换成原始类的名称(同一个文件中的另一个,还记得吗?)时,错误消失了。

所以我在这里不知所措。 Haven之前没有使用过这样的自定义转换器。建议?如果 DataContext null ,谷歌给了我很多东西,但在转换器方面则更好。

1 个答案:

答案 0 :(得分:0)

例如,如果您将转换器放在根文件夹中“转换器”文件夹中的单独文件中,您可以在字典中注册它:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:converters="clr-namespace:BamseGurka.Converters">

    <converters:BamseConverter x:Name="BamseConverter" />
</ResourceDictionary>

然后你就像你做的那样绑定它:

<Label Name="ErrorMessage" ...
       Visibility="{Binding Converter={StaticResource BamseConverter}}" >

当然,请记住设置在Visibility中绑定的属性,因为此时它不起作用。