猿问

WPF mvvm 路由

我正在使用 WPF 在 C# 中创建桌面应用程序,但我被我的菜单卡住了。我有一个左侧面板菜单可以在功能之间切换。


我创建了一个带有 2 个视图的视图模型,这些视图需要显示在我的主窗口中。如果我点击监控,内容视图从主页切换到监控,但是当我在监控时,如果我尝试回到主页,它不起作用,我不明白为什么。


在我的项目文件夹下面


([abc] = 文件夹;- abc = 文件):


[PROJECT]   

    [assets]

        - Home.png

        - Stats.png

    [ViewModels]

        - MainWindowViewModel.cs

    [Views]

        - Home.xaml

        - Home.cs

        - Stats.xaml

        - Stats.cs

    - MainWindow.xaml

    - MainWindow.cs

    - App.xaml

    - App.cs

    - App.config

下面是我代码的重要部分:


主窗口.xaml


<Window.Resources>

    <DataTemplate x:Key="HomeViewTemplate" DataType="{x:Type viewmodels:MainWindowViewModel}">

        <views:Home DataContext="{Binding}" />

    </DataTemplate>


    <DataTemplate x:Key="StatsViewTemplate" DataType="{x:Type viewmodels:MainWindowViewModel}">

        <views:Stats DataContext="{Binding}" />

    </DataTemplate>

</Window.Resources>


<Grid Grid.Row="0" MouseLeftButtonDown="OpenHome">

    <Grid.ColumnDefinitions>

        <ColumnDefinition Width="70" />

        <ColumnDefinition Width="1*" />

    </Grid.ColumnDefinitions>


    <Image Source="/assets/home.png" Height="32" Width="32" />

    <Label Content="Home" Grid.Column="1" Foreground="White" FontSize="12" VerticalAlignment="Center" Padding="0,5,5,5" />

</Grid>


<Grid Grid.Row="1" MouseLeftButtonDown="OpenStats">

    <Grid.ColumnDefinitions>

        <ColumnDefinition Width="70" />

        <ColumnDefinition Width="1*" />

    </Grid.ColumnDefinitions>


    <Image Source="/assets/stats.png" Height="32" Width="32" />

    <Label Content="Monitoring" Grid.Column="1" Foreground="White" FontSize="12" VerticalAlignment="Center" Padding="0,5,5,5" />

</Grid>


蛊毒传说
浏览 170回答 1
1回答

阿波罗的战车

Route通过INotifyPropertyChanged接口实现发送有关属性更改的通知:public class MainWindowViewModel : INotifyPropertyChanged{&nbsp; &nbsp; public string _Route;&nbsp; &nbsp; public string Route&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get { return _Route; }&nbsp; &nbsp; &nbsp; &nbsp; set { _Route = value; OnPropertyChanged("Route"); }&nbsp; &nbsp; }&nbsp; &nbsp; public event PropertyChangedEventHandler PropertyChanged;&nbsp; &nbsp; private void OnPropertyChanged(string propertyName)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));&nbsp; &nbsp; }&nbsp; &nbsp; public MainWindowViewModel(){}}此类通知将激活 DataTrigger,后者又将更改 ContentTemplate
随时随地看视频慕课网APP
我要回答