使用Silverlight进行数据绑定

4

如果我想将一个集合绑定到 Silverlight 中的某种列表控件,那么唯一的方法就是让集合中的基础对象实现 INotifyPropertyChanged,并且集合本身是 Observablecollection 吗?

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

4个回答

5

不,一旦你在Visual Studio中向Silverlight项目添加服务引用,你可以右键单击它并配置它,使其使用ObservableCollection(这是默认设置)

此外,默认情况下,Service Reference将确保服务返回的类型已经实现了INotifyPropertyChanged。


1

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


1
正如Maurice所说,您可以绑定到任何集合(甚至IEnumerable),并且绑定将起作用,但是您不会收到更改通知。但请注意,您不需要使用ObservableCollection,任何实现INotifyCollectionChanged的内容都可以工作(尽管ObservableCollection是最简单的)。
集合中的对象不必实现INotifyPropertyChanged,但如果它们这样做,则会在每个单独更改时收到通知。

0

只是为了明确,您可以将 OneTime 绑定到任何对象。如果您想进行OneWayTwoWay绑定,则需要一个支持其中一个接口的对象。如上所述,通过创建服务引用,您可以为通过 Web 服务传递的对象执行此操作。但是,如果由于某种原因,您仍然需要从旧类生成可绑定对象,则可以实现实现IValueConverter的转换器,然后使用它来“包装”您的旧对象以创建一个可绑定对象,就像这样:

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

</UserControl>

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接