命令绑定未在 WPF 应用程序中正确执行

本文关键字:执行 应用程序 WPF 绑定 命令 | 更新日期: 2023-09-27 18:32:56

我想在我的WPF应用程序中实现我的导航。目前,StartScreen.xaml在启动时显示,但是当我单击按钮时,DeviceManagement.xaml不会显示。甚至没有调用 ShowDeviceManagement 命令。

这让我假设按钮命令不正确?我该如何解决它?

App.xaml

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:DeviceManagementViewModel}">
        <view:DeviceManagement />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:MainWindowViewModel}">
        <view:StartScreen />
    </DataTemplate>
</Application.Resources>

MainWindow.xaml

<Window ...>
    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>
    <ContentControl
        Content="{Binding ViewModel}">
    </ContentControl>
</Window>

StartScreen.xaml

<UserControl ...>
     <Button
         Content="Click Me"
         Command="{Binding DataContext.ShowDeviceManagement, RelativeSource={RelativeSource AncestorType={x:Type vm:MainWindowViewModel}}, Mode=OneWay}"/>
</UserControl>

主WindoViewModel.cs

class MainWindowViewModel : ViewModelBase
{
    public ViewModelBase ViewModel { get; set; }
    public MainWindowViewModel()
    {
        ViewModel = this;
    }
    public ICommand ShowDeviceManagement
    {
        get
        {
            return new RelayCommand(action => ViewModel = new DeviceManagementViewModel());
        }
    }
}

命令绑定未在 WPF 应用程序中正确执行

"DataContext" 在命令绑定中已过时。RelativeSource 用于在可视化树中查找祖先,而您的 MainWindowViewModel 不是可视化的。应该是这样的:

Command="{Binding ShowDeviceManagement, Mode=OneWay}"