2015-03-22 3 views
0

Я пытаюсь создать WPF UserControl. В моем контроле я хочу привязать ImageSource к объекту Source моего объекта. Вот то, что я до сих пор:WPF привязка не работает

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)))); 

Когда я запускаю проект, я не вижу ожидаемого изображения. Что я делаю не так?

ответ

1

Здесь вы должны установить исходный объект привязки, который сам является UserControl.

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

Не устанавливайте DataContext в UserControl к себе, потому что усложняет помощью UserControl в общих обязательных сценариев, где он наследует DataContext от родительского контроля:

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

Здесь , SomeImage является свойством в унаследованном DataContext UserControl, который не был бы так легко доступен, если бы вы явно задали DataContext раньше.


Обратите внимание также, что нет необходимости в наборе UriKind на обновления URI:

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

Ваш UserControl не указан. Добавить
DataContext = {Binding RelativeSource = {RelativeSource Self}}
к вашим атрибутам UserControl.

Смежные вопросы