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;
}
这个方法正确吗?我担心,如果我有很多视图,那么切换就不容易了,因为我必须跟踪每个视图的状态。
实现这种多视图的最佳实践是什么?
我可以有一个类似于视图的接口,然后我可以改变样式:
<IView x:Name="mainView"
Style="{Binding istyle}"
ItemsSource="{Binding Path=folders}"
ItemTemplate="{Binding istyle.Template}" />
那么切换可以简单地通过更改样式中的样式来完成。
我选择的解决方案是使用<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导航到新视图