2009-12-04 55 views
1

在WPF中,我有一個帶UserControl的ListBox作爲它的ItemTemplate - 所有數據都顯示ok。我現在在該用戶控件中添加了一個用於輸入的文本框。在MVVM設計中,當用戶在列表框中的項目模板中編輯用戶控件中的文本框的內容時,我想在主窗口中執行一些操作(重新計算值)。問題是 - 如何將該事件傳播到模型?用戶控件綁定到一個業務對象,我可以看到在那裏改變了值(INotifyPropertyChanged在BO中實現),但是,如何將該事件提交給模型(而不是代碼隱藏)呢? 任何例子或指針最受歡迎!來自UserControl的WPF ListBox中ItemTemplate的事件

回答

0

我假設,因爲這是一個MVVM應用程序,您試圖傳播完成文本更改事件到視圖模型。

您可以通過使用Attached Property或行爲在視圖中添加代碼而無需添加代碼。實際上,表達式庫上有一個行爲,當您點擊Enter in a TextBox時調用一個命令。只要TextBox改變它的值(這在目標上非常相似),這很容易被重新編制,以在ViewModel上觸發自定義的ICommand。

+0

感謝您指點我到這些迄今尚未開發的地區。假設我要在用戶控件中(在項目模板中的列表框中)實現一個帶有ICommand的行爲,我不太明白在列表框位於頂層的情況下,這將如何操作。或者,也許我的列表框/ itemtemplate/usercontrol /文本框層次結構有缺陷?感謝您的鏈接 - 一些更多的點擊將是有益的。在foll鏈接的例子也很有用,行爲似乎是正確的想法(參見http://codeblitz.wordpress.com/2009/07/01/wpf-editable-behavior-for-labels/) – jas 2009-12-05 12:41:11

+0

這可以讓您可能會將您的文本更改爲ViewModel中的命令,從而允許您設置屬性或引發可以傳播鏈條的事件。另外,在重新閱讀之後,我意識到您可能想要使用路由事件將事件從您的UserControl傳播到更高級別的接口,從而可以以任何他們想要的方式處理它們。 (他們讓你在視覺樹中傳播任意數量的「關卡」......) – 2009-12-05 20:19:53

+0

事實證明,我通過簡單的依賴屬性實現了我想要的。在路線上,我有兩個問題:DP不是兩種方式,我沒有綁定語法正確(什麼工作:「{Binding Path = DataContext.MyValue,RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ListBox }},UpdateSourceTrigger = PropertyChanged}「)。感謝您的建議。 – jas 2009-12-06 20:59:48

相關問題