ListView: definieren ItemsPanelTemplate im Ressourcen-dictionary

Ich habe ein ListView, das layout sieht aus wie ein Windows-Explorer-Ansicht (Symbol + einige details), gebunden eine Liste irgendwo im ViewModel.

Mein Ziel hier können Sie Umschalten zwischen der explorer-Ansicht oder der klassischen Ansicht, Wann immer wir wollen.

Ich definieren könnte, eine ItemsPanelTemplate genau das tun, die Arbeit ordnungsgemäß angezeigt wird, das layout, die direkt in die ListView.ItemsPanel Feld. Nun, würde ich mag, Sie zu definieren, in der die Ressourcen so, dass ich in der Lage, es zu benutzen, in verschiedenen Ansichten, insbesondere in einem Steuergerät, der Benutzer sollte die Wahl haben zwischen der Explorer-Ansicht oder der klassischen Listen-Ansicht (Standard-rendering für eine Liste)

Wie würden Sie das tun? Ich kann nicht definieren, jeder ItemsPanelTemplate in meinem ResourceDictionary, und wenn ich definieren DataTemplate es ist nicht kompatibel (und ich dachte, dass nach der reinen Logik, ItemsPanelTemplate Erben sollen von DataTemplate, aber es ist eigentlich nicht Aussehen wie so).

Code-snippet für die aktuelle Liste:

<ListView SelectionMode="Single"
                VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Bottom"
                ScrollViewer.VerticalScrollBarVisibility="Auto"
                ItemsSource="{Binding ListUserApps, 
                                UpdateSourceTrigger=PropertyChanged}" 
                SelectedIndex="{Binding SelectedUserApp, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="White">

                <ListView.ItemsPanel>
                    <ItemsPanelTemplate >
                        <WrapPanel Width="{Binding (FrameworkElement.ActualWidth),
                     RelativeSource={RelativeSource 
                                     AncestorType=ScrollContentPresenter}}"
                     ItemWidth="{Binding (ListView.View).ItemWidth,
                     RelativeSource={RelativeSource AncestorType=ListView}}"

                     ItemHeight="{Binding (ListView.View).ItemHeight,
                     RelativeSource={RelativeSource AncestorType=ListView}}" />
                        <!--MinWidth="{Binding ItemWidth,
                     RelativeSource={RelativeSource Self}}"-->
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>

                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="Auto" Width="150">
                            <Image Source="{Binding Path=Appli.AppType, Converter={StaticResource TypeToIconConverter}}" Margin="5"
                                   Height="50" Width="50"/>
                            <StackPanel VerticalAlignment="Center" Width="90">
                                <TextBlock Text="{Binding Path=Appli.AppName}" 
                     FontSize="13" HorizontalAlignment="Left" TextWrapping="WrapWithOverflow"
                     Margin="0,0,0,1" />
                                <TextBlock Text="{Binding Path=Appli.AppType}" FontSize="9" 
                     HorizontalAlignment="Left" Margin="0,0,0,1" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>

            </ListView>

Halten die ItemTemplate in eine statische Ressource war einfach zu tun, aber jetzt kann ich nichts mit der ItemsPanelTemplate...

Irgendwelche Ideen? Ich bin mit MVVM, so versuche ich im Idealfall nicht um die code-behind-wenn möglich

InformationsquelleAutor Damascus | 2011-04-18
Schreibe einen Kommentar