我正在为Windows 8.1编写一个应用程序,该应用程序的功能显示了一个包含在我从之前编写的API中扩展的包装类中的水平系列图像。
基本上设置如下:
我的基类A存在于我引用的外部库中。
然后,我在当前项目中包含了B类,它扩展了A但添加了WriteableBitmap
属性:
public class B:A
{
private WriteableBitmap imageBitmap;
public WriteableBitmap ImageBitmap
{
get { return this.imageBitmap; }
set
{
if (Equals(value, imageBitmap)) return;
this.imageBitmap = value;
OnPropertyChanged();
}
}
}
然后我尝试使用ItemsControl
中的Xaml
来显示图像,其中ItemSource
绑定到" ImageList"这是我的包装类的列表(在XAML文件中显然只链接到类A
)。
<ItemsControl ItemsSource="{Binding ImageList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source = "{Binding **trying to bind to the ImageBitmap property**}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
正如您在上面所看到的,当我尝试绑定Image
时,我可以访问的唯一属性是最初在基类A
中声明的属性。如果我尝试以某种方式将绑定强制转换为更新的子类B
,如下所示:
<Image Source = "{Binding (ex:B.ImageBitmap)}"/>
抛出错误说它的绑定无效。
作为参考,ex
是我在B
文件开头的项目中存在Xaml
的命名空间的名称。
基本上我试图找出将绑定强制转换为您在当前项目中声明的特定类型的正确方法,该类扩展了您也引用的外部库中存在的类。
有什么想法吗?
编辑:为了提供更多关于我要做的事情的详细信息,让我再解释一下,并尝试减少不必要的细节。
我有一个外部装配,我们称之为ExternalLib
。内部ExternalLib
是以下类:
A
,它具有已在外部库中声明的各种属性。另一个名为ImagePackage
的包装类,它包含以下属性:
List<A> ImageList;
String PackageName;
然后在我当前的项目中,我的课程B
扩展了A
并添加了额外的WriteableBitmap
属性。
这一切都集中在我的应用中,我尝试使用嵌套ItemsControl
来显示ImagePackage
的垂直列表,并将其显示为PackageName
作为标题。在每个垂直列表中,然后是一个水平列表,显示该列表中的每个图像(从WriteableBitmap
中声明的B
获得)。想象一下,想想Netflix是如何布局的(垂直和水平列表在一起)。
为实现这一目标,我使用了全局数据上下文,并且我有以下Xaml
:
<ItemsControl x:Name="ImageRoot" Height="861" Width="656" DataContext="{StaticResource GlobalDataContext}" ItemsSource="{Binding MainImageInfo.ImagePackages}" DisplayMemberPath="PackageName">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding ImageList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source = "{Binding ImageBitmap}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
尝试将Image
的来源声明为ImageBitmap
会导致Intellisense抛出拟合,但它仍会编译并运行。问题是当绑定实际上试图更新整个应用程序崩溃时(即使我将其设置为在例外情况下中断)说:
MyAppName has exited with code -1073741189 (0xc000027b).
最后,Intellisense在该行提供的实际警告是:
Cannot resolve property "ImageBitmap" in data context of type "ExternalLib.A"