Привязка команды XAML MenuFlyoutItem в ListView

Я использую в проекте подсветку MVVM, и у меня есть ListView в NoteListPage. В ListView я определяю 2 MenuFlyoutItem, я хочу связать каждый из них с командой, которую я создал в моей модели просмотра.

Вот некоторые подробности в моем NoteListPage.xaml:

DataContext="{Binding NoteListPage, Source={StaticResource Locator}}">

В моей модели просмотра у меня есть:

    public ObservableCollection<Note> NoteList
    {
        get { return _noteList; }

        set { Set(() => NoteList, ref _noteList, value); }
    }

    public ICommand DeleteComamand { get; private set; }
    public ICommand EditCommand { get; private set; }

Я привязываю ItemSource к NoteList,

<ListView  x:Name="NoteListView" ItemsSource="{Binding NoteList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border 
                    BorderBrush="White"
                    BorderThickness="2"
                    CornerRadius="5"
                    Width="360"
                    Margin="10,5" 
                    Tapped="Border_Tapped">

                    <FlyoutBase.AttachedFlyout>
                        <MenuFlyout>
                            <MenuFlyoutItem Text="Delete"
                        />

                            <MenuFlyoutItem Text="Edit"
                         />
                        </MenuFlyout>
                    </FlyoutBase.AttachedFlyout>

                    <StackPanel >
                        <TextBlock
                               FontSize="30" Text="{Binding NoteTitle}"/>
                        <TextBlock
                               FontSize="25"
                               TextWrapping="Wrap" Text="{Binding NoteContent}"/>
                    </StackPanel>

                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

но тогда я не могу привязать команду MenuFlyoutItem, потому что контекст данных имеет тип Model.

введите описание изображения здесь

Как я могу привязать DeleteComamand и EditCommand к MenuFlyoutItem, но в этом случае ListView ItemSource по-прежнему привязан к NoteList? В противном случае на странице просмотра списка не будет отображаться заголовок / содержимое элемента.


person Rui Huang    schedule 05.05.2015    source источник


Ответы (2)


Вы можете использовать ElementName для перехода к родительскому DataContext:

<MenuFlyoutItem
    Text="Delete"
    Command="{Binding DataContext.DeleteComamand, ElementName=NoteListView}"/>
person Kai Brummund    schedule 06.05.2015

person    schedule
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую немедленную помощь. правильное объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы и могло бы сделайте его более полезным для будущих читателей, задав другие похожие вопросы. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения, включая сделанные вами предположения. - person Melebius; 17.04.2018