2012-08-09 43 views
2

TestScenario:BindingExpression的來源發生變化時的通知?

我有一個的DependencyProperty A. 我有一個視圖模型與我使用OneWayToSource對綁定控件的A-屬性綁定屬性的控制。綁定由控件明確更新。

我在運行時切換綁定的ViewModel實例,從而更改我的綁定的基礎源。 當發生這種情況時,我想要一個事件觸發,告訴我的控件我現在可以更新其DependencyProperty A的值。原因是,只要更改綁定的ViewModel,DependencyProperty A的DefaultValue就會寫入Source 。 取而代之的是,我想讓控件提供一個適當的值並手動更新源代碼。

有人可能會認爲只聽DataContextChanged事件就可以解決問題。但是,當這個事件被觸發時,BindingExpression的Source仍然指向舊的ViewModel。

我可以想到的唯一方法就是使用Dispatcher.BeginInvoke和DataContextChanged的EventHandler中的DispatcherPriority.DataBind優先級。

它的工作原理,但不感覺乾淨。

我正在尋找綁定類中的事件,通知我有關源的更改......但是我無法找到它。

謝謝

+0

有同樣的問題......並提出了相同的解決方法,即在'DataContextChanged'處理程序中的BeginInvoking,並再次設置DP值並明確更新源。不幸的是,這隻有當綁定的源代碼真的是元素的數據上下文時纔有效,但是當使用相對源代碼來執行其他操作時......不適用。:/ – poke 2013-07-11 13:03:35

回答

0

也許我沒有完全理解問題,但你可以只使用NotifyOnSourceUpdatedNotifyOnTargetUpdated屬性(以及相應的SourceUpdatedTargetUpdated事件)?

+0

不幸的是沒有。這些事件僅在源(NotifyOnSourceUpdated)或目標(NotifyOnTargetUpdated)上的屬性因綁定而得到更新時觸發。但是,我將DataContext本身切換出來,所以我不更新Source,但寧願將其完全更換。說得通? :) – TwinHabit 2012-08-09 20:08:21

+0

也許你可以發佈一些代碼來演示這個問題。這聽起來像你需要知道什麼時候DataContext已經改變了,但是_ Binding已經被更新了嗎?這是從DataContextChanged事件[強制綁定刷新](http://stackoverflow.com/questions/656552/is-it-possible-to-refresh-wpf-data-bindings)的問題? – 2012-08-09 20:20:02

+0

這不是強制綁定刷新的問題。綁定刷新很好,但是我需要在數據源發生更改後立即響應,以便控件可以更新其屬性值,從而更新視圖模型中的值。也許Dispatcher.BeginInvoke真的是這裏的方式... – TwinHabit 2012-08-09 23:56:57

相關問題