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); }
}
}
}
那是因为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}}">