簡體   English   中英

Silverlight綁定問題

[英]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中,您無法使用反射來訪問私有類型和成員。 如果類型或成員的訪問級別阻止您在靜態編譯的代碼中訪問它,則無法使用反射動態訪問它。


http://connect.microsoft.com/VisualStudio/feedback/details/526229/in-silverlight-4-binding-to-an-internal-data-by-code-doesnt-work

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM