[英]Silverlight Binding Issue
好的,所以我試圖在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" />
使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僅支持綁定到公共類型。
我還沒有檢查過CoverFlow項目,但是從你在XAML中定義綁定的方式來看,模型中的Image
屬性通常應該是Uri
而不是實際的Image控件:
public Uri Image { get; set; } // should also be renamed to ImageUri
無論如何,這更清潔了。 如果你真的必須在模型中使用實際的Image
,那么你必須在XAML中定義一個ContentPresenter
。
至於為什么Title
不會顯示,我不知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.