2014-08-27 23 views
2

被調用我有一個ItemsControl控制。在其項目中,我展示了很多東西:圖像,文本塊等。事件時,控制成品結合

我在itemcontrol上實現了「搜索」功能 - 這意味着如果用戶從鍵盤輸入一些字母,項目控件將被刷新。我的搜索方法處於代碼隱藏狀態,並且不到一秒鐘。但是,我輸入字母和看結果之間的時間是3-4秒。我有一個關閉窗口的命令,我希望在顯示搜索結果之前把它放在確切的時刻。如果我把這個命令放在我的搜索方法的末尾(在代碼隱藏中),關閉窗口和顯示項目之間還有幾秒鐘的延遲。我認爲綁定速度很慢,這就是爲什麼我需要捕獲綁定完成時調用的事件。 WPF中是否有這樣的事件?

OnPropertyChanged事件被稱爲搜索方法完成之前,這樣就不會幫我。

我也試圖與OnDataContextChanged事件,但它被稱爲只有一次 - 當控件初始化。當用戶輸入字母併發生新綁定時,我也需要它。

+0

您是否啓用了虛擬化?如何使用過濾列表刷新控件? – Pragmateek 2014-08-27 13:09:25

+0

@Pragmateek我用OnPropertyChanged事件刷新它。 – 2014-08-27 13:09:48

回答

2

當您在WPF中的源屬性和目標依賴項屬性之間建立數據綁定時,該實際上被轉換爲BindingExpression對象,該對象在適當的時刻負責更新源和目標。

不幸的是,BindingExpression不提供事件當一些更新,你可以在這裏看到:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression(v=vs.110).aspx

的唯一方法是設置UpdateSourceTriggerExplicit當你定義你的綁定,在代碼落後綁定表達式並手動更新源和目標 - 然後您可以完全控制,並可以在此場景中封裝您的通用功能。

您可以通過使用BindingOperations.GetBindingExpression靜態方法獲得BindingExpressionhttp://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression(v=vs.110).aspx

如果您有任何問題,請隨時提問。

P.S:是不是有可能另一種方式來做到這一點?如果你正在使用您綁定到ItemsControl源收集,能不能別源集合進行檢索/過濾操作,只是讓收集綁定更新您的ItemsControl

+0

「手動更新源和目標」我如何從代碼隱藏手動更新它?它實際上是一種單向綁定。 – 2014-08-27 13:19:52

+0

如果你看看'BindingExpression'類(見答案鏈接),你會發現兩種方法:''UpdateSource'and UpdateTarget'。您只需在適合您的開發環境的適當時間調用這些。 – feO2x 2014-08-27 13:23:14

+0

但我看不出這和我已經做了什麼之間的區別。即使在我調用UpdateSource屬性之後,仍然有幾秒鐘的延遲,並且我無法捕捉到綁定完成前的確切時間。 – 2014-08-27 13:39:54