簡體   English   中英

使用Silverlight進行數據綁定

[英]Databinding with Silverlight

如果我想將集合綁定到Silverlight中的某種形式的列表控件。 是唯一的方法,這樣使集合中的底層對象實現INotifyPropertyChanged,並使集合成為Observablecollection?

如果我使用某種第三方對象,例如由Web服務返回的對象,我必須將其包裝或映射到實現INotifyPropertyChanged的東西?

不,一旦在Visual Studio中向silverlight項目添加服務引用,就可以右鍵單擊它並對其進行配置,使其使用ObservableCollection(無論如何都是默認設置)

此外,默認情況下,服務引用將確保服務的返回類型已實現INotifyPropertyChanged。

您可以將列表綁定到任何IEnumerable集合或對任何對象屬性的簡單控件。 缺點是,如果將項目添加到列表或更改屬性,則不會獲得chnage通知。 因此,如果這是一個問題,這取決於您的應用程序。

正如Maurice所說,你可以綁定到任何集合(甚至是IEnumerable),綁定也可以,但你不會得到更改通知。 但是請注意,您不需要使用ObservableCollection,任何實現INotifyCollectionChanged的方法都可以工作(盡管ObservableCollection是最簡單的)。

集合中的對象不必實現INotifyPropertyChanged,但如果它們有,那么您將收到有關每個更改的通知。

為了清楚起見 ,您可以將OneTime綁定到任何對象。 如果你想要OneWayTwoWay綁定,你將需要一個對象支持其中一個接口。 如上所述,創建服務引用可以為您通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM