WPF在Xaml中的ItemsSource中设置了Propertyname

时间:2015-09-04 10:07:33

标签: c# wpf binding

我想构建一个UserControl,我可以在其中绑定ItemsSource并显示Objects的缩略图集合。为了让它尽可能通用,我想接受没有任何类型的IEnumerable,并将Image Propertyname传递给usercontrol。

为此,我添加了两个DependencyPropertys(ItemsSource(IEnumerable),BitmapImagePath(string))。

<UserControl x:Class="UserControls.ThumbnailListControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             d:DesignHeight="300"
             d:DesignWidth="300"
             mc:Ignorable="d">
    <UserControl.Resources>
        <styles:SharedResourceDictionary>
            <DataTemplate x:Key="DataItem">
                <Image Source="{Binding}" />
            </DataTemplate>
        </styles:SharedResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <ItemsControl VerticalAlignment="Stretch"
                      ItemTemplate="{StaticResource DataItem}"
                      ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type userControls:ThumbnailListControl}},
                                            Path=ItemsSource}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</UserControl>

我不知道如何使用Binding归档到属性名称“BitmapImagePath”。一个可能的解决方案是在代码中使用反射,但我认为这不是优雅的解决方案。

在父UserControl中,我不想包含ThumbnailList之类的内容 <ThumbnailListControl ItemsSource="MyItemsSource" BitmapImagePath="ThumbnailImage" />

1 个答案:

答案 0 :(得分:0)

首先,为您的自定义UserControl命名:x:Name="MyUserControl"。 然后在您的DataTemplate中简单地绑定到它的dependency-property:

...
<DataTemplate x:Key="DataItem">
    <Image Source="{Binding ElementName=MyUserControl, Path=BitmapImagePath}" />
</DataTemplate>
...

答案取自:Binding UserControl to its own dependencyProperty doesn't work