我正在爲lightswitch創建一個usercontrol。這基本上是一個Silverlight用戶控件,它接收「DataContext」屬性上的businessObject。知道何時在UserControl的代碼中更改「Datacontext」
我可以在沒有問題的xaml副項中綁定,但是在後面的代碼中,我不知道如何在dataContext發生更改時獲得通知?
我需要一個特殊的綁定。
非常感謝!
我正在爲lightswitch創建一個usercontrol。這基本上是一個Silverlight用戶控件,它接收「DataContext」屬性上的businessObject。知道何時在UserControl的代碼中更改「Datacontext」
我可以在沒有問題的xaml副項中綁定,但是在後面的代碼中,我不知道如何在dataContext發生更改時獲得通知?
我需要一個特殊的綁定。
非常感謝!
您可以擴展控件類(UserControl
在您的情況),並添加一個新的DependencyProperty
包裝DataContext
以便公開PropertyChanged
。見thesethreeposts和this question。或者,您可能並非真的需要傾聽DataContextChanged
,這取決於您要做什麼,因爲處理模型中的更改可能更合適。
最後,如果您有耐心和選擇,我聽說SL 5暴露DataContextChanged
。
不幸的是,我不能等SL5 :(我檢查了你的鏈接,第一個似乎是更強大的功能,但在lightswitch中,我沒有選擇,這個項目綁定在「DataContext」 ,而不是「MyDataContext」或其他任何東西,那麼,我可以重新定義DataContext項目,它是我自己的依賴屬性嗎? – J4N
不幸的是,我對LightSwitch不熟悉,可以嘗試擴展控件並按順序添加「public new Object DataContext」在LS控件上隱藏最初的'DataContext',然後創建一個'MyDataContext'屬性,並設置每當DataContext被設置時,爲了觸發事件,這將是一個問題,但是如果LS控件在DataContext中獲取或設置任何技巧,因爲這些技巧會丟失。 –
我終於使用了它:它工作的很棒:http://www.codeproject.com/Articles/38559/Silverlight-DataContext-Changed-Event的.aspx – J4N
恐怕你不能再設置靜態只讀字段,除非你用「新」來做。
您可能會捕獲通過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);
感謝
在SL 4這是一個有點卡住了。其中一個選擇是讓你的BO可以處理這種變化 - 如果DataContext_changed可用,你會怎麼做? – 2011-11-29 14:21:11