2011-05-24 87 views
3

將複雜類綁定到用戶控件以重用時,什麼是「最佳」(或最常用的)方法?將Silverlight UserControl綁定到複雜對象

我想創建一些類的可重用的庫,我不知道我應該使用哪種方法。例子:我想創建一個地址庫,它定義了Address類(具有屬性Line1,Line2等),它是驗證邏輯和一個AddressControl,它充當每個屬性綁定字段的查看器/編輯器。

在使用中我可能有一個客戶類BillingAddress,是DeliveryAddress性質,我想在我的客戶控制從而綁定這些:

<addressLib:AddressControl [xxx]="{Binding BillingAddress}" /> 

所以,問題是什麼,我把XXX?

起初我還以爲在控制創建一個DependencyProperty「地址」的:

<addressLib:AddressControl Address="{Binding BillingAddress}" /> 

但現在我想我肯定可以只使用現有的DataContext屬性?

<addressLib:AddressControl DataContext="{Binding BillingAddress}" /> 

這是最好的方法嗎?是否有任何問題,例如更新或NotifyPropertyChange問​​題?

非常感謝您的幫助!

回答

1

一個區別要記住的是,與依賴屬性你更改通知和與DataContext的你不這樣做(至少不是直到SL5是出)

+0

感謝您的警告 - 我想我可能會從控件中引發事件來指示更改。 – Quango 2011-05-25 15:13:49

+0

我已經將此更改爲正確答案,因爲使用DataContext不可靠,因爲您沒有收到更改通知。雖然它沒有錯,但它使控件成爲一次性綁定,並且如果父控件更改了datacontext,它將不會更新。這是一個相當有限的用例恕我直言,所以依賴屬性方法是正確的。 – Quango 2011-08-12 08:43:00

+0

如果有人有興趣這個答案:http://stackoverflow.com/questions/421581/silverlight-binding-a-child-controls-property-to-a-property-in-a-user-control/2528018#2528018演示控制中綁定值的最佳方法。 – Quango 2011-08-12 10:09:06

1

將您的控件的DataContext設置爲您的模型(在這種情況下爲BillingAddress)即可。如果您的控件在DataTemplate中用於ItemsControl,那麼DataContext當然就是「{Binding}」。

+0

感謝您的確認。 – Quango 2011-05-25 15:13:42

相關問題