WPF绑定不起作用

时间:2015-03-22 17:08:07

标签: wpf xaml binding

我正在尝试创建WPF UserControl。在我的控制中,我想将Image Source绑定到我对象的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))));

当我运行项目时,我看不到预期的图像。我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

这里,SomeImage是UserControl的继承DataContext中的一个属性,如果您之前已经显式设置了DataContext,则该属性不会那么容易访问。


另请注意,无需在包URI上设置UriKind

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

答案 1 :(得分:0)

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