2016-09-26 5 views
1

ähnlich wie Windows Explorer, habe ich eine Liste von Ordnern als Daten, aber ich mag mehrere Ansichten haben, für die Ex: Icon-Ansicht, Listenansicht usw.Mehrere Ansichten nähern in WPF

Das ist mein Ansatz:

<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> 

im Code hinter

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. Ist das der richtige Ansatz? Ich bin besorgt, dass, wenn ich viele Ansichten habe, das Umschalten nicht einfach ist, weil ich den Zustand jeder Ansicht verfolgen muss.

  2. Wie können diese verschiedenen Ansichten am besten implementiert werden?

  3. Kann ich so etwas wie eine Schnittstelle für die Ansicht habe, dann kann ich den Stil ändern:

für ex:

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

Dann Makel einfach durch Änderung der Art getan werden kann, in der istyle.

+0

Sie könnten dies in einer tab-Ansicht ohne eine Überschrift tun. Sie erhalten die gesamte Virtualisierungsunterstützung und Benutzerfreundlichkeit einer Registerkartenansicht und können sie mithilfe von Indizes steuern, die an eine Aufzählung oder etwas gebunden sind. – Joe

+0

Ich würde sagen, der beste Weg wäre, ViewModel erste MVVM zu verwenden, separate ViewModels und ein ContentControl verwenden. Aber es ist keine kleine Aufgabe, MVVM auf halbem Weg durch ein Projekt zu implementieren. – Joe

+0

Bedeutet das, dass jede View (GridView oder ListView) eine separate View (mit ViewModel) Klasse ist? – kurakura88

Antwort

0

Die Lösung, die ich wählte, ist zu verwenden <Frame>, wo ich den Rahmen mit der richtigen Ansicht ändern kann, die ich brauche.

Dann in der ViewModel 'ToggleCommand, würde ich den Rahmen zu einer neuen Ansicht zu navigieren.