IValueConverter不执行

时间:2014-12-13 23:46:17

标签: c# wpf xaml converter

我有这个XAML代码( ErdMenuItem.xaml ):

<UserControl x:Class="ErdBuilder.ErdMenuItem"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:erdBuilder="clr-namespace:ErdBuilder"
  x:Name="UserControl">  

   <UserControl.Resources>
      <erdBuilder:ByteImageConverter x:Key="imageConverter" />
   </UserControl.Resources>

   <Image Source="{Binding Converter={StaticResource imageConverter}, ElementName=UserControl, Path=Icon}" />
</UserControl>

如果我写:

<Image Source="{Binding Converter={StaticResource imageConverter}, ElementName=UserControl, Path=Icon}" />

然后转换器将不会被执行 - 我在转换器中使用断点。但如果我使用它:

<Image Source="{Binding Converter={StaticResource imageConverter}}" />

然后转换器将被执行。 图标字符串类型的依赖项属性。我不知道为什么在我添加DependencyProperty时不会执行Converter,这应该带来我想要转换的Value。任何想法?

图标在这里( ErdMenuItem.xaml.cs ):

namespace ErdBuilder
{
    public partial class ErdMenuItem
    {
        public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(string), typeof(ErdMenuItem), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
        public string Icon
        {
            get { return (string)GetValue(IconProperty); }
            set { SetValue(IconProperty, value); }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

那是因为DataContext中没有数据。绑定表达式返回当前DataContext的值。您可以使用DataContext表达式为Image设置{Binding Converter={StaticResource imageConverter}, Path=Icon},或将其设置为根元素(在您的情况下为UserControl)。此选项更好,因为您可以使用RelativeSource表达式来避免使用显式名称。

<UserControl x:Class="ErdBuilder.ErdMenuItem"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:erdBuilder="clr-namespace:ErdBuilder"
  x:Name="UserControl"
  DataContext="{Binding RelateSource={RelativeSource Self}}">