[英]Databinding with Silverlight
如果我想將集合綁定到Silverlight中的某種形式的列表控件。 是唯一的方法,這樣使集合中的底層對象實現INotifyPropertyChanged,並使集合成為Observablecollection?
如果我使用某種第三方對象,例如由Web服務返回的對象,我必須將其包裝或映射到實現INotifyPropertyChanged的東西?
不,一旦在Visual Studio中向silverlight項目添加服務引用,就可以右鍵單擊它並對其進行配置,使其使用ObservableCollection(無論如何都是默認設置)
此外,默認情況下,服務引用將確保服務的返回類型已實現INotifyPropertyChanged。
您可以將列表綁定到任何IEnumerable集合或對任何對象屬性的簡單控件。 缺點是,如果將項目添加到列表或更改屬性,則不會獲得chnage通知。 因此,如果這是一個問題,這取決於您的應用程序。
正如Maurice所說,你可以綁定到任何集合(甚至是IEnumerable),綁定也可以,但你不會得到更改通知。 但是請注意,您不需要使用ObservableCollection,任何實現INotifyCollectionChanged的方法都可以工作(盡管ObservableCollection是最簡單的)。
集合中的對象不必實現INotifyPropertyChanged,但如果它們有,那么您將收到有關每個更改的通知。
為了清楚起見 ,您可以將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”的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.