2011-11-29 63 views
6

我正在爲lightswitch創建一個usercontrol。這基本上是一個Silverlight用戶控件,它接收「DataContext」屬性上的businessObject。知道何時在UserControl的代碼中更改「Datacontext」

我可以在沒有問題的xaml副項中綁定,但是在後面的代碼中,我不知道如何在dataContext發生更改時獲得通知?

我需要一個特殊的綁定。

非常感謝!

+0

在SL 4這是一個有點卡住了。其中一個選擇是讓你的BO可以處理這種變化 - 如果DataContext_changed可用,你會怎麼做? – 2011-11-29 14:21:11

回答

6

您可以擴展控件類(UserControl在您的情況),並添加一個新的DependencyProperty包裝DataContext以便公開PropertyChanged。見thesethreepoststhis question。或者,您可能並非真的需要傾聽DataContextChanged,這取決於您要做什麼,因爲處理模型中的更改可能更合適。

最後,如果您有耐心和選擇,我聽說SL 5暴露DataContextChanged

+0

不幸的是,我不能等SL5 :(我檢查了你的鏈接,第一個似乎是更強大的功能,但在lightswitch中,我沒有選擇,這個項目綁定在「DataContext」 ,而不是「MyDataContext」或其他任何東西,那麼,我可以重新定義DataContext項目,它是我自己的依賴屬性嗎? – J4N

+0

不幸的是,我對LightSwitch不熟悉,可以嘗試擴展控件並按順序添加「public new Object DataContext」在LS控件上隱藏最初的'DataContext',然後創建一個'MyDataContext'屬性,並設置每當DataContext被設置時,爲了觸發事件,這將是一個問題,但是如果LS控件在DataContext中獲取或設置任何技巧,因爲這些技巧會丟失。 –

+0

我終於使用了它:它工作的很棒:http://www.codeproject.com/Articles/38559/Silverlight-DataContext-Changed-Event的.aspx – J4N

2

恐怕你不能再設置靜態只讀字段,除非你用「新」來做。

您可能會捕獲通過DataContext依賴屬性的數據綁定更改的DataContext。 例如註冊一個名爲「MyDataContext」的新dp,並創建一個綁定。
DataContext是綁定源,而MyDataContext是綁定目標,即DataContext ---> MyDataContext。所以每次DataContext你會得到你的MyDataContext dp改變的回調。我認爲這會工作,但沒有測試。

代碼如下:

// dp declaration.. 
public static readonly DependencyProperty MyDataContextProperty = DependencyProperty.Register(null, "MyDataContext", typeof(object), typeof(MyControl), new PropertyMetadata(MyDataContextChangedCallback)); 


// create binding in constructor or initialization. 
Binding binding = new Binding("DataContext"); 
BindingOperations.SetBinding(this, MyDataContextProperty, binding); 

感謝

相關問題