我有一个用于显示图像的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>
答案 0 :(得分:0)
使用
...
Source={Binding ., Converter={StaticResource imageConverter}}" />
绑定到当前的UserControl。单独使用ListView时,它将绑定到包含ListView的UserControl,并且可以正常工作。
如果将ListView UserControl放入另一个UserControl,其值将绑定到其父UserControl,而不是&#34;拥有&#34;用户控件。
试试这个:
转到ListView UserControl xaml.cs并将DataContext设置为自身。
//...
DataContext = this;
//...