使用Silverlight进行数据绑定

时间:2008-09-23 15:07:51

标签: silverlight

如果我想将集合绑定到Silverlight中的某种形式的列表控件。是唯一的方法,这样使集合中的底层对象实现INotifyPropertyChanged,并使集合成为Observablecollection?

如果我使用某种第三方对象,例如由Web服务返回的对象,我必须将其包装或映射到实现INotifyPropertyChanged的内容?

4 个答案:

答案 0 :(得分:5)

不,在Visual Studio中向Silverlight项目添加服务引用后,可以右键单击它并进行配置,使其使用ObservableCollection(无论如何都是默认设置)

此外,默认情况下,服务引用将确保服务的返回类型已实现INotifyPropertyChanged。

答案 1 :(得分:1)

您可以将列表绑定到任何IEnumerable集合或对任何对象属性的简单控件。缺点是,如果将项目添加到列表或更改属性,则不会获得chnage通知。因此,如果这是一个问题,这取决于您的应用程序。

答案 2 :(得分:1)

正如Maurice所说,你可以绑定到任何集合(甚至IEnumerable),绑定也可以,但你不会得到更改通知。但是请注意,您不需要使用ObservableCollection,任何实现INotifyCollectionChanged的东西都可以工作(尽管ObservableCollection是最简单的)。

集合中的对象无需实现INotifyPropertyChanged,但如果有,则会收到有关每次更改的通知。

答案 3 :(得分:0)

为了清楚起见,您可以 OneTime 绑定到任何对象。如果您想 OneWay TwoWay 绑定,您将需要一个对象支持其中一个接口。如上所述,创建服务引用可以为您通过webservice传递的对象执行此操作。但是,如果由于某种原因,您仍然需要从遗留类中生成Bindable对象,则可以实现一个实现IValueConverter的Converter,然后使用它将您的旧对象“包装”在一个可绑定的对象中:

<UserControl>
    <UserControl.Resources>
        <local:FooToBindableFooConverter x:Key="BindableFooConverter"/>
    </UserControl.Resources>
    <TextBlock Text="{Binding FooInstance, Converter={StaticResource BindableFooConverter}}"/>

</UserControl>

转换器非常强大,可以解决许多“我需要X但我有Y”的问题。

相关问题