我已经使用最近打开的文件夹创建了动态MenuItem。这很好。现在,因为这些MenuItems是动态创建的,所以当我单击一个MenutItem时,我想引发一个动作并将MenuItem的标题作为参数。这是我的“ MainView.xaml”
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
xmlns:common="clr-namespace:Common;assembly=RecentFileListLib"
xmlns:cal="http://www.caliburnproject.org"
xmlns:self="clr-namespace:MainUI.Models"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ViewModels="clr-namespace:MainUI.ViewModels" xmlns:local="clr-namespace:MainUI.Views" x:Name="window" x:Class="MainUI.Views.MainView"
mc:Ignorable="d"
Title="MainView" Height="450" Width="800">
<Window.Resources>
<self:DebugDummyConverter x:Key="DebugDummyConverter" />
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="4" Margin="0">
<MenuItem x:Name="menuItem" Header="_File">
<MenuItem Header="_Open" x:Name="FileOpen"/>
<MenuItem x:Name="RecentProject" Header="Recents Projects" >
<MenuItem.ItemTemplate >
<DataTemplate >
<MenuItem Header="{Binding DisplayPath, Converter={StaticResource DebugDummyConverter}}" cal:Message.Attach="Remove($dataContext)"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</MenuItem>
</Menu>
<StackPanel Orientation="Vertical" Grid.Row="2" Grid.Column="1" Grid.RowSpan="1" Margin=" 0 0 10 0" >
<Button x:Name="LoadUser" Content="Load User Page" />
</StackPanel>
<ContentControl Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="1" Grid.RowSpan="2" x:Name="ActiveItem"/>
<StatusBar Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem Grid.Column="1">
<TextBlock Text="{Binding FolderPath}" />
</StatusBarItem>
</StatusBar>
</Grid>
为此,我正在使用cal:Message.Attach="Remove($dataContext)
在我的视图模型“ MainViewModel”
public partial class MainViewModel : Conductor<Object> { public BindableCollection<RecentFile> RecentProject { get; private set; } = new BindableCollection<RecentFile>(); public string FolderPath { get; set; } public MainViewModel() { Persister = new RegistryPersister(); MaxNumberOfFiles = 9; MaxPathLength = 50; MenuItemFormatOneToNine = "_{0}: {2}"; MenuItemFormatTenPlus = "{0}: {2}"; RemoveMenuItems(); LoadRecentFiles(); } public void Remove(Object child) { }
通过这样操作,当我单击菜单项时,出现一条消息“找不到删除方法的目标。”
如果有人可以帮助我。
提前感谢
我已经使用最近打开的文件夹创建了动态MenuItem。这很好。现在,因为这些MenuItem是动态创建的,所以当我单击一个MenutItem时,我想提出一个...
您可以使用cal:Action:TargetWithoutContext。例如,