對於我的WPF應用程序,我使用MVVM,現在我想在用戶右鍵單擊某個東西時顯示生成的上下文菜單。
將右鍵單擊路由到某個動作很容易,但是如何顯示一個contextmenu哪些項由ViewModel生成?WPF MVVM:如何創建和顯示上下文菜單?
我什至不知道從哪裏開始顯示上下文菜單,因爲我沒有直接訪問MVVM中的視圖。
對於我的WPF應用程序,我使用MVVM,現在我想在用戶右鍵單擊某個東西時顯示生成的上下文菜單。
將右鍵單擊路由到某個動作很容易,但是如何顯示一個contextmenu哪些項由ViewModel生成?WPF MVVM:如何創建和顯示上下文菜單?
我什至不知道從哪裏開始顯示上下文菜單,因爲我沒有直接訪問MVVM中的視圖。
道歉在回答延遲,必須有一個有點實驗來得到它的工作。提供以下代碼。我只是建立了自己的垃圾數據源,這樣我就可以顯示某種數據。它只顯示,如果我右鍵單擊第一列標題,沒有其他地方......我認爲是你想要的,對吧?讓我知道你如何繼續...任何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>
我最喜歡的答案是在VM中有一個命令列表(對應於上下文菜單中的項目)。將ContextMenu的ItemSource綁定到VM.ListOfCommands。根據口味使用樣式。
下面是在同一行的例子... http://www.julmar.com/blog/mark/2009/04/21/UsingMVVMWithMenusInWPF.aspx
如果,例如,你想在一個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屬性中。
希望幫助
在我來說,我希望文本菜單附加到一個GridView的一個ListView頭項目 - 任何想法要放置文本菜單在這種情況下(我不想文本菜單是無處不在ListView,只是頭)? – Sam 2010-07-20 08:56:30
嗨,山姆,剛剛回答爲新的'答案',以便代碼格式化。見下文。 – jameschinnock 2010-07-20 11:12:26
我認爲這是更好的答案,因爲這會將菜單顯示的責任移動到視圖中,同時保持菜單項的邏輯執行到VM中。這也意味着菜單項可以重新排列,刪除,更改等。沒有涉及虛擬機,因爲演示文稿全部在XAML中 – nrjohnstone 2014-02-19 00:52:22