代码之家  ›  专栏  ›  技术社区  ›  jimplode

Silverlight绑定问题

  •  1
  • jimplode  · 技术社区  · 14 年前

    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中Cover用户控件的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>
    

    我遇到的问题是,对于绑定的每个元素,我都会得到“Testing”一词,但我没有得到图像或标题,它们来自附加到控件的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" />
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Adam Sills    14 年前

    使 CoverItem 班级公开。Silverlight的缺点之一是不允许跨程序集对内部类型进行反射。当绑定到CLR属性时,反射用于获取值。尝试获取值的程序集是系统.Windows,它将无权在程序集中反映内部类型。

    我在匿名类型(即内部类型)的上下文中对此进行了描述: http://surrealization.com/blog/silverlight-anonymous-type-binding-gotcha/

    或者,可以在程序集上提供InternalsVisibleTo属性,以允许系统.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支持绑定到公共

        2
  •  0
  •   herzmeister    14 年前

    我还没有签出CoverFlow项目,但是从您在XAML中定义绑定的方式来看 Image 模型中的属性通常应为 Uri 而不是实际的图像控件:

        public Uri Image { get; set; } // should also be renamed to ImageUri
    

    图像 在模型中,必须定义 ContentPresenter 在你的XAML里。

    至于为什么 Title