我第二次尝试得到答案。
我只是想了解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获得该命令的工作?
我真的要离开了!
如果您尝试使用MVVM模式,则需要在ViewModel中定义命令。您需要在视图中将DataContext设置为ViewModel-如果需要帮助,请参见this答案。