如果我想将一个集合绑定到 Silverlight 中的某种列表控件,那么唯一的方法就是让集合中的基础对象实现 INotifyPropertyChanged,并且集合本身是 Observablecollection 吗?
如果我正在使用某种第三方对象,例如由 Web 服务返回的对象,我是否必须将其包装或映射到实现 INotifyPropertyChanged 的对象?
如果我想将一个集合绑定到 Silverlight 中的某种列表控件,那么唯一的方法就是让集合中的基础对象实现 INotifyPropertyChanged,并且集合本身是 Observablecollection 吗?
如果我正在使用某种第三方对象,例如由 Web 服务返回的对象,我是否必须将其包装或映射到实现 INotifyPropertyChanged 的对象?
不,一旦你在Visual Studio中向Silverlight项目添加服务引用,你可以右键单击它并配置它,使其使用ObservableCollection(这是默认设置)
此外,默认情况下,Service Reference将确保服务返回的类型已经实现了INotifyPropertyChanged。
您可以将列表绑定到任何IEnumerable集合或将简单控件绑定到任何对象属性。缺点是,如果向列表添加项目或更改属性,则不会收到更改通知。因此,这取决于您的应用程序是否存在问题。
只是为了明确,您可以将 OneTime 绑定到任何对象。如果您想进行OneWay或TwoWay绑定,则需要一个支持其中一个接口的对象。如上所述,通过创建服务引用,您可以为通过 Web 服务传递的对象执行此操作。但是,如果由于某种原因,您仍然需要从旧类生成可绑定对象,则可以实现实现IValueConverter的转换器,然后使用它来“包装”您的旧对象以创建一个可绑定对象,就像这样:
<UserControl>
<UserControl.Resources>
<local:FooToBindableFooConverter x:Key="BindableFooConverter"/>
</UserControl.Resources>
<TextBlock Text="{Binding FooInstance, Converter={StaticResource BindableFooConverter}}"/>
</UserControl>
转换器非常强大,可以解决许多“我需要 X 但我有 Y”问题。