WPF MVVM: как создать и показать контекстное меню? - PullRequest
3 голосов
/ 20 июля 2010

Для моего приложения WPF я использую MVVM, и теперь я хочу показать сгенерированное контекстное меню, когда пользователь щелкает правой кнопкой мыши по чему-либо.
Направить щелчок правой кнопкой мыши на какое-то действие было легко, но как мне показать контекстное меню, какие элементы генерируются ViewModel?

Я даже не представляю, с чего начать отображение контекстного меню, поскольку у меня нет прямого доступа к представлению в MVVM.

Ответы [ 3 ]

3 голосов
/ 20 июля 2010

Если, например, вы хотите показать ContextMenu поверх DataGrid, который, возможно, показывает продажи, вы можете сделать это:

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


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

где MyCommand - это свойство Command, предоставляемое ViewModel, или создание ObservableCollection команд в ViewModel, которые отображаются и привязываются в свойстве ItemSource ContextMenu.

Надеюсь, что помогает

3 голосов
/ 20 июля 2010

Извиняюсь за задержку с ответом, пришлось немного поэкспериментировать, чтобы заставить его работать. Дайте следующий код. Я просто настроил свой собственный источник данных для мусора, чтобы отображать какие-то данные. Он отображается только в том случае, если я щелкну правой кнопкой мыши заголовок первого столбца, а не где-нибудь еще ... что я думаю, что вы хотите, верно? Дайте мне знать, как вы поживаете ... любые пробники будут продолжать думать.

   <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>
0 голосов
/ 20 июля 2010

Ответ «вне головы» будет иметь список команд (соответствующих пунктам в вашем контекстном меню) в ВМ.Свяжите ItemSource ContextMenu с VM.ListOfCommands.Используйте стили по вкусу.

Вот пример на тех же строках ... http://www.julmar.com/blog/mark/2009/04/21/UsingMVVMWithMenusInWPF.aspx

...