WPF 绑定不起作用

WPF binding isn't working

我正在尝试创建一个 WPF UserControl。在我的控制下,我想将 ImageSource 绑定到我的对象的 Source 属性。这是我目前所拥有的:

XAML 文件:

<UserControl x:Class="DeletableObjectPresenter.DeletableObjectPresenter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
mc:Ignorable="d" 
d:DesignHeight="300" 
d:DesignWidth="300">
  <Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"></ColumnDefinition>
      <ColumnDefinition Width="*"></ColumnDefinition>
      <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Image Source="{Binding Source}"></Image>
  </Grid>
</UserControl>

代码:

public ImageSource Source {
  get {
    return (ImageSource) GetValue(SourceProperty);
  }
  set {
    SetValue(SourceProperty, value);
  }
}

public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
  "Source", typeof(ImageSource), typeof(DeletableObjectPresenter), new PropertyMetadata(new BitmapImage(
    new Uri("pack://application:,,,/DeletableObjectPresenter;component/Resources/StandartView.png",
            UriKind.Absolute))));

当我 运行 投影时,我没有看到预期的图像。我做错了什么?

您尚未设置 UserControlDataContext 属性。添加
DataContext = {Binding RelativeSource = {RelativeSource Self}}
到你 UserControl 的属性。

您必须设置绑定的源对象,这里是UserControl本身。

<Image Source="{Binding Source,
    RelativeSource={RelativeSource AncestorType=UserControl}}"/>

不要将 UserControl 的 DataContext 设置为其自身,因为这会使在常见绑定场景中使用 UserControl 变得复杂,因为它从其父控件继承 DataContext:

<local:DeletableObjectPresenter Source"{Binding SomeImage}"/>

这里,SomeImage是UserControl继承的DataContext中的一个属性,如果之前显式设置了DataContext,就没那么容易访问了。


另请注意,没有必要在 Pack URI 上设置 UriKind

new BitmapImage(new Uri(
  "pack://application:,,,/DeletableObjectPresenter;component/Resources/StandartView.png"));