2010-07-20 104 views
2

對於我的WPF應用程序,我使用MVVM,現在我想在用戶右鍵單擊某個東西時顯示生成的上下文菜單。
將右鍵單擊路由到某個動作很容易,但是如何顯示一個contextmenu哪些項由ViewModel生成?WPF MVVM:如何創建和顯示上下文菜單?

我什至不知道從哪裏開始顯示上下文菜單,因爲我沒有直接訪問MVVM中的視圖。

回答

3

道歉在回答延遲,必須有一個有點實驗來得到它的工作。提供以下代碼。我只是建立了自己的垃圾數據源,這樣我就可以顯示某種數據。它只顯示,如果我右鍵單擊第一列標題,沒有其他地方......我認爲是你想要的,對吧?讓我知道你如何繼續...任何probs將繼續思考。

<Grid> 
    <ListView Margin="8,8,33,12" ItemsSource="{Binding Source={StaticResource Stuff}, Path=MyCollection}"> 
     <ListView.View> 
     <GridView> 
       <GridViewColumn Width="100" DisplayMemberBinding="{Binding}"> 
        <GridViewColumnHeader>ProductName 
         <GridViewColumnHeader.ContextMenu> 
          <ContextMenu Name="MyMenu"> 
           <MenuItem Header="Sort by..."/> 
           <MenuItem Header="Follow link..."/> 
          </ContextMenu> 
         </GridViewColumnHeader.ContextMenu> 
        </GridViewColumnHeader> 
       </GridViewColumn> 
       <GridViewColumn Width="100" Header="Product Name" DisplayMemberBinding="{Binding Path=Length}"/> 
     </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
3

如果,例如,你想在一個DataGrid,也許表明銷售,你可以這樣做是爲了顯示文本菜單:

  <y:DataGrid.ContextMenu> 
      <ContextMenu> 
       <MenuItem Name="cmNewSales" Foreground="Black" Command={Binding Path=MyCommand}/> 


      </ContextMenu> 
     </y:DataGrid.ContextMenu> 

其中MyCommand是ViewModel公開的Command屬性,或者在ViewModel中創建ObservableCollection,它們暴露並綁定到ContextMenu的ItemSource屬性中。

希望幫助

+0

在我來說,我希望文本菜單附加到一個GridView的一個ListView頭項目 - 任何想法要放置文本菜單在這種情況下(我不想文本菜單是無處不在ListView,只是頭)? – Sam 2010-07-20 08:56:30

+0

嗨,山姆,剛剛回答爲新的'答案',以便代碼格式化。見下文。 – jameschinnock 2010-07-20 11:12:26

+0

我認爲這是更好的答案,因爲這會將菜單顯示的責任移動到視圖中,同時保持菜單項的邏輯執行到VM中。這也意味着菜單項可以重新排列,刪除,更改等。沒有涉及虛擬機,因爲演示文稿全部在XAML中 – nrjohnstone 2014-02-19 00:52:22