.NET MAUI
一种 Microsoft 开源框架,用于构建跨移动设备、平板电脑、台式机的原生设备应用程序。
90 个问题
你好
为什么 MenuFlyoutItem 中的 Command 不会触发?
<DataTemplate> <Label Text="{Binding Name}" VerticalTextAlignment="Center"
ToolTipProperties.Text="{Binding}" >
<FlyoutBase.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="New Folder"
Command="{Binding NewFolderCommand}"/>
<MenuFlyoutItem Text="Rename Folder"
Command="{Binding RenameFolderCommand}"/>
<MenuFlyoutItem Text="Delete Folder"
Command="{Binding DeleteFolderCommand}"/>
</MenuFlyout>
</FlyoutBase.ContextFlyout>
</Label> </DataTemplate>
谢谢
此问题整理于:https://learn.microsoft.com/en-us/answers/questions/1851458/menuflyoutitem-commands-not-fire
你好,
我注意到您使用了 DataTemplate
,这意味着此项目应来自 CollectionView
。在 CollectionView
中,子项只能包含 ItemSource
中的项,不能直接调用 ViewModel
中的命令。
例如,绑定到 CollectionView
的列表是 Models。如果 Model 类只有 Name
和 Desc
属性,则子项只能将这些属性用作绑定项。
解决方法是通过相对绑定再次将 Command
绑定到 ViewModel
以使用 Command。请参考以下代码和文档。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiApp5"
x:Class="MauiApp5.MainPage">
<ContentPage.BindingContext>
<local:ClockViewModel/>
</ContentPage.BindingContext>
<CollectionView ItemsSource="{Binding Models}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Name}" VerticalTextAlignment="Center" ToolTipProperties.Text="{Binding}" >
<FlyoutBase.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="{Binding Description}"
Command="{Binding Source={RelativeSource AncestorType={x:Type local:ClockViewModel}}, Path=NewFolderCommand}"/>
</MenuFlyout>
</FlyoutBase.ContextFlyout>
</Label>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。