WPF自定义控件单独工作,但不作为另一个控件的一部分

时间:2014-10-01 10:22:28

标签: c# wpf wpf-controls

我有一个用于显示图像的WPF自定义控件。

有一个列表视图绑定到一个可观察的数据库实体集合,随后通过值转换器将其转换为图像。

当我将控件拖到Windows窗体项目(使用WPF主机控件)时,它在列表后面指定可观察集合时效果很好。我测试了这个并且它正确更新并完成我需要的所有内容。

无论其

我想有三个这样的控件显示相关的图像,所以我创建了第二个控件,它只是将三个原始控件组合成一个堆栈面板。

我为每个更新images属性创建了一个方法。

 public void ChangeSearchResults(List<ItemImage> items)
 {
      SearchResultsImageViewer.ItemImages = new ObservableCollection<ItemImage>(items);
 }

但是我无法让图像显示出来。

直接查看控件和将控件视为子控件之间似乎存在差异。

我很确定它不是winforms中的元素主机,因为控件本身运行良好。

有什么我没有意识到的吗?

这是列表视图的Xaml

                                                                                                                           

        <!--  Sets the template for the data to be displayed  -->
        <ListView.ItemTemplate>

            <DataTemplate>
                    <StackPanel>
                        <!--  Defines the actual image being displayed  -->
                        <Image x:Name="ItemImageControl"
                               Width="100"
                               Height="200"
                               Margin="1"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch"
                               Cursor="Hand"
                               Source="{Binding .,
                                                Converter={StaticResource imageConverter}}" />

                        <TextBlock HorizontalAlignment="Center"
                                   FontWeight="Bold"
                                   Text="{Binding .,
                                                  Converter={StaticResource groupNameConverter}}" />
                    </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

编辑 - 这是用户控件XAML

<UserControl x:Class="Project.CustomControls.ctrlImageCollection"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:CustomControls="clr-namespace:Project.CustomControls"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d">
        <StackPanel>
            <CustomControls:ctrlImageViewer x:Name="ShortlistImageViewer" />
            <CustomControls:ctrlImageViewer x:Name="SearchResultsImageViewer" />
            <CustomControls:ctrlImageViewer x:Name="GroupImageViewer" />
        </StackPanel>
</UserControl>

1 个答案:

答案 0 :(得分:0)

使用

...
Source={Binding ., Converter={StaticResource imageConverter}}" />

绑定到当前的UserControl。单独使用ListView时,它将绑定到包含ListView的UserControl,并且可以正常工作。

如果将ListView UserControl放入另一个UserControl,其值将绑定到其父UserControl,而不是&#34;拥有&#34;用户控件。

试试这个:

转到ListView UserControl xaml.cs并将DataContext设置为自身。

//...
DataContext = this;
//...