WPF自定义控件本身工作,但不作为另一控件的一部分

本文关键字:控件 一部分 不作为 自定义控件 工作 WPF | 更新日期: 2023-09-27 18:25:08

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

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

当我将控件拖动到windows窗体项目上(使用WPF Host控件)时,当在列表后面分配可观察集合时,它可以完美地工作。我已经测试了这个,它更新正确,并做了我需要的一切。

然而

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

我为每个创建了一个方法来更新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>

EDIT-这是用户控件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>

WPF自定义控件本身工作,但不作为另一控件的一部分

使用

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

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

如果将ListView UserControl放入另一个UserControl,则其值将绑定到其父UserControl,而不是"拥有"UserControl。

试试这个:

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

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