WPF 绑定不起作用
WPF binding isn't working
我正在尝试创建一个 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))));
当我 运行 投影时,我没有看到预期的图像。我做错了什么?
您尚未设置 UserControl
的 DataContext
属性。添加
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"));
我正在尝试创建一个 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))));
当我 运行 投影时,我没有看到预期的图像。我做错了什么?
您尚未设置 UserControl
的 DataContext
属性。添加
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"));