IValueConverter doesn't execute

本文关键字:execute doesn IValueConverter | 更新日期: 2023-09-27 18:34:07

我有这个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,它应该带来我要转换的值。有什么想法吗?

图标在这里(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); }
        }
    }
}

IValueConverter doesn't execute

那是因为DataContext中没有数据。绑定表达式返回当前DataContext的值。您可以使用表达式{Binding Converter={StaticResource imageConverter}, Path=Icon} Image设置DataContext,也可以为根元素设置(在您的情况下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}}">