WPF中的多视图方法

本文关键字:视图 方法 WPF | 更新日期: 2023-09-27 18:08:43

与Windows资源管理器类似,我有一个文件夹列表作为数据,但我想有多个视图,例如:图标视图,列表视图等

这是我的方法:

<Page.Resources>
   <DataTemplate x:Name="iconViewDataTemplate"> ... </DataTemplate>
   <DataTemplate x:Name="listViewDataTemplate> ... </DataTemplate>
</Page.Resources>
<Grid>
   <StackPanel>
      <Grid>
         <Button x:Name="toggleViewButton" Content="Toggle View" Click="toggleViewButton_Click" />
      </Grid>
      <Grid>
         <GridView x:Name="folderView"
                   ItemsSource="{Binding Path=folders}"
                   ItemTemplate="{StaticResource iconViewDataTemplate}"/>
         <ListView x:Name="listView"
                   ItemsSource="{Binding Path=folders}"
                   ItemTemplate="{StaticResource listViewDataTemplate}"
                   IsEnabled="False"
                   Opacity="0"/>
      </Grid>
   </StackPanel>
</Grid>
后面代码中的

private void toggleViewButton_Click(object sender, RoutedEventArgs e)
{
   folderView.IsEnabled = folderView.IsEnabled ^ true;
   folderView.Opacity = folderView.Opacity ^ 1;
   listView.IsEnabled = listView.IsEnabled ^ true;
   listView.Opacity = listView.Opacity ^ 1;
}

  1. 这个方法正确吗?我担心,如果我有很多视图,那么切换就不容易了,因为我必须跟踪每个视图的状态。

  2. 实现这种多视图的最佳实践是什么?

  3. 我可以有一个类似于视图的接口,然后我可以改变样式:

为例:

<IView x:Name="mainView"
       Style="{Binding istyle}"
       ItemsSource="{Binding Path=folders}"
       ItemTemplate="{Binding istyle.Template}" />

那么切换可以简单地通过更改样式中的样式来完成。

WPF中的多视图方法

我选择的解决方案是使用<Frame>,在那里我可以用我需要的适当视图改变框架。

<Grid>
  <StackPanel>
    <Grid>
      <Button x:Name="toggleViewButton" Content="Toggle View" Command="{Binding ToggleCommand}" />
    </Grid> 
    <Grid>
       <Frame x:Name="viewFrame"/>
    </Grid>
  </StackPanel>
</Grid>

然后在ViewModel' ToggleCommand中,我将使Frame导航到新视图