使用Caliburn.Micro cal:Message.Attach找不到方法的目标]]

问题描述 投票:0回答:1

我已经使用最近打开的文件夹创建了动态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时,我想提出一个...

menuitem caliburn.micro
1个回答
1
投票

您可以使用cal:Action:TargetWithoutContext。例如,

© www.soinside.com 2019 - 2024. All rights reserved.