【问题标题】:WPF: Add a command to auto-generated by binding menu itemsWPF:将命令添加到通过绑定菜单项自动生成
【发布时间】:2012-12-15 10:45:39
【问题描述】:

使用MVVM。我创建了单独的菜单“最近的文件”,它从绑定中获取其项目。看起来是这样的:

        <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
        </MenuItem>

现在,我想将命令添加到每个自动生成的项目中,它应该将路径作为命令参数并通过单击执行导入文件操作。

您能否建议如何以 MVVM 方式完成?

【问题讨论】:

    标签: wpf mvvm binding command


    【解决方案1】:

    再次,我自己找到了解决方案。我试图以错误的方式输入命令,如下所示,但它不起作用:

                <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
                <MenuItem.ItemContainerStyle>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding ImportRecentItemCommand}" />
                    </Style>
                </MenuItem.ItemContainerStyle>
            </MenuItem>
    

    这是正确的方法。还是不明白它是怎么工作的,必须深入学习WPF!

                <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
                <MenuItem.ItemContainerStyle>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding DataContext.ImportRecentItemCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=1}}" />
                    </Style>
                </MenuItem.ItemContainerStyle>
            </MenuItem>
    

    编辑:最终版本

    XAML:

                <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
                <MenuItem.ItemContainerStyle>
                    <Style TargetType="{x:Type MenuItem}">
                        <Setter Property="Command" Value="{Binding DataContext.ImportRecentItemCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=1}}" />
                        <Setter Property="CommandParameter" Value="{Binding}" />
                    </Style>
                </MenuItem.ItemContainerStyle>
            </MenuItem>
    

    ViewModel:使用了 MVVM Light Toolkit,RelayCommand 从那里开始:

            private ICommand _importRecentItemCommand;
    
            public ICommand ImportRecentItemCommand
            {
                get { return _importRecentItemCommand ?? (_importRecentItemCommand = new RelayCommand<object>(ImportRecentItemCommandExecuted)); }
            }
    
            private void ImportRecentItemCommandExecuted(object parameter)
            {
                MessageBox.Show(parameter.ToString());
            }
    

    享受

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多