好的,我已经尝试在codeplex http://silverlightcoverflow.codeplex.com/
上实现了一个封面流程我想用我自己的类进行数据绑定:
class CoverItem
{
BitmapImage _image;
string _title;
string _link;
string _content;
public BitmapImage Image
{
get { return _image; }
set { _image = value; }
}
public string Title
{
get { return _title; }
set { _title = value; }
}
public string Link
{
get { return _link; }
set { _link = value; }
}
public string Content
{
get { return _content; }
set { _content = value; }
}
}
这是来自codeplex的封面用户控件的XAML:
<custom:CoverFlowControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Image}" Width="300" />
<TextBlock Text="{Binding Title}" Width="300" />
<TextBlock Text="Testing" Width="300" />
</StackPanel>
</DataTemplate>
</custom:CoverFlowControl.ItemTemplate>
我遇到的问题是我为每个绑定的元素得到了“测试”字样,但我没有得到图片或标题,这些图片来自我附加到控件的ItemSource属性的对象。
Covers.ItemsSource = _items;
我的问题是,我哪里错了?这应该是一个简单的绑定,所以想想我错过了什么。
提前感谢您的帮助。
编辑:
如果我将代码更改为:
List<BitmapImage> images = new List<BitmapImage>() { _items[0].Image, _items[1].Image, _items[2].Image, _items[3].Image };
Covers.ItemsSource = images;// _items;
然后有这样的绑定:
<Image Source="{Binding}" Width="300" />
我现在显示我的图像。所以我知道这是绑定的问题。
还试过
<Image Source="{Binding Path=Image}" Width="300" />
答案 0 :(得分:4)
公开CoverItem
课程。 Silverlight的缺点之一是不允许跨程序集的内部类型的反射权限。绑定到CLR属性时,使用反射来获取值。试图获取值的程序集是System.Windows,它没有权限反映程序集中的内部类型。
我在匿名类型(内部类型)的上下文中写过这个: http://surrealization.com/blog/silverlight-anonymous-type-binding-gotcha/
或者,您可以在程序集上提供InternalsVisibleTo属性,以允许System.Windows“查看”您的内部类型。
http://grahammurray.wordpress.com/2010/05/30/binding-to-anonymous-types-in-silverlight/
有关从马口的描述,请参阅此MSDN链接:
http://msdn.microsoft.com/en-us/library/stfy7tfc(VS.95).aspx
在Silverlight中,您无法使用 反射访问私有类型和 成员。如果是某种类型的访问级别 或会员会阻止你 以静态编译方式访问它 代码,您无法动态访问它 通过使用反射。
Silverlight支持绑定到public 仅限类型。
答案 1 :(得分:0)
我还没有检查过CoverFlow项目,但是从你在XAML中定义绑定的方式来看,模型中的Image
属性通常应该是Uri
而不是 public Uri Image { get; set; } // should also be renamed to ImageUri
实际图像控制:
Image
无论如何,这更干净。如果您真的必须在模型中使用实际ContentPresenter
,则必须在XAML中定义Title
。
至于{{1}}无法显示的原因,我不知道。