WPF中的多视图方法

时间:2016-09-26 08:54:01

标签: c# wpf xaml

与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. 我可以为视图提供类似界面的内容,然后我可以更改样式:

  4. 代表:

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

    然后只需更改istyle中的样式即可完成切换。

1 个答案:

答案 0 :(得分:0)

我选择的解决方案是使用<Frame>,我可以使用正确的视图更改框架。

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

然后在ViewModel&#39; ToggleCommand,我会让Frame导航到新的View。