2009-07-20 46 views
3

我想使用MVVM模式來編寫WPF應用程序。我正在使用缺乏自動過濾功能的WPF數據網格(來自工具包)。所以我想實現它。我在列標題模板中添加了一個上下文菜單,它具有名爲「Filter」的MenuItem,它實際上應該調用過濾方法。WPF MVVM:找出哪個頭文件上下文菜單已被點擊

所以我設置了一個MenuItem的命令是適當的DelegateCommand去ViewModel。問題是我需要傳遞有關右鍵單擊的實際列的信息!如果我沒有使用MVVM,我會實現一個事件處理函數,該函數會接收一個「sender」參數(MenuItem),然後我會找到它的父類(ContextMenu),然後它的父類會給我列。但是我怎麼能在這裏做到同樣的事情?我怎樣才能將發件人傳遞給我的命令?這可以使用ComandParameter完成嗎?

我真的不想使用額外的複雜模式來實現這樣一個簡單的任務。畢竟,MVVM應該簡化開發,而不是相反...

回答

1

您可以傳遞列標題值作爲命令參數,並使用它來獲取ViewModel的列詳細信息?

+0

我該怎麼做?像 2009-07-20 23:04:18

+1

只是一個DataContext綁定將做的伎倆 2009-07-22 04:56:58

0

你可以嘗試一些相對的源代碼魔法,但是如果你可以爲每個頭文件綁定一個不同的ViewModel,比如HeaderViewModelItem,它可能會更容易。從那裏你只需要在HeaderViewModelItem中觸發一個DelegateCommand,而不是在較大的視圖模型上。

我用這個模型取得了相當不錯的成功。獲得一點數據綁定舞蹈。

0

如果要將某些內容傳遞給command參數,請注意上下文菜單位於其自己的可視化樹上。幸運的是,它仍然繼承其父DataContext的,所以像

<MenuItem CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=DataContext}" /> 

應該讓你的GridViewColumnHeader,或者至少東西在它的可視化樹。