WPF用户控件中的命令

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

我第二次尝试得到答案。

我只是想了解WPF和MVVM,我完全感到困惑。实际上,我需要以下任务的帮助:

我有一个MainWindow,带有菜单。从此菜单,我想将一些数据加载到嵌套在用户控件内的树视图中。

到目前为止,我应该使用命令。我在哪里定义它们?

假设我有菜单,我将在菜单内使用'inside the MainWindow.xaml.<br> I also would (of course) implement the Command`属性。

执行代码应嵌套在单独的类中或需要数据的UserControl后面的代码中。

这是我的用户控件:

namespace PlcGenerator.Views
{
  public partial class ProjectView : UserControl
  {
    public static RoutedCommand cmdLoadEcad = new RoutedCommand();

    public ProjectView()
    {
        InitializeComponent();
    }

    private void CanExecuteCmdLoadEcad(object sender, CanExecuteRoutedEventArgs e) 
    {
        e.CanExecute = true;
    }

    private void ExecutedCmdLoadEcad(object sender, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("Command executed.");
    }
  }
}

现在这是mainWindow的(精简)部分:

<ribbon:RibbonWindow
x:Class="PlcGenerator.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:PlcGenerator"
    xmlns:viewmodels="clr-namespace:PlcGenerator.ViewModels"
    xmlns:views="clr-namespace:PlcGenerator.Views"
    mc:Ignorable="d"
    Loaded="Window_Loaded"
    Closing="ClosingApp"
    Title="Plc Generator" Height="600" Width="1200">
<Window.CommandBindings>
    <CommandBinding Command="{x:Static views:ProjectView.cmdLoadEcad}"
                    Executed="ProjectView.ExecutedCmdLoadEcad"
                    CanExecute="ProjectView.CanExecuteCmdLoadEcad"/>
</Window.CommandBindings>
<Window.Resources>
    <DataTemplate x:Name="settingsViewTemplate" DataType="{x:Type viewmodels:SettingsViewModel}">
        <views:SettingsView DataContext="{Binding}"/>
    </DataTemplate>
    <DataTemplate x:Name="projectsViewTemplate" DataType="{x:Type viewmodels:ProjectViewModel}">
        <views:ProjectView DataContext="{Binding}"/>
    </DataTemplate>
</Window.Resources>
<DockPanel LastChildFill="True">

    <ribbon:Ribbon DockPanel.Dock="Top">
        <Ribbon.ApplicationMenu>
            <RibbonApplicationMenu SmallImageSource="Icons/ApplicationMenu.png">
                <RibbonApplicationMenuItem Header="Neues Projekt" ImageSource="Icons/NewEntry.png" Command="{x:Static views:ProjectView.cmdLoadEcad}"/>
            </RibbonApplicationMenu>
        </Ribbon.ApplicationMenu>
    </ribbon:Ribbon>

        <!-- Fensterinhalt-->
    <ContentControl Margin="5" Content="{Binding}"/>
</DockPanel>

这里出现错误,找不到命令元素,我想是因为它不在MainWindow后面的代码中?

因此,如何从单独的类或用户控件中的MainWindow-Menu获得该命令的工作?

我真的要离开了!

c# wpf xaml command
1个回答
0
投票

如果您尝试使用MVVM模式,则需要在ViewModel中定义命令。您需要在视图中将DataContext设置为ViewModel-如果需要帮助,请参见this答案。

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