2010-10-14 5 views
3

J'ai une application WPF utilisant un TabControl lié à une collection de la classe MyTab. Chaque TabItem a un ListView lié à la propriété Items de la classe MyTab.Databound WPF TabControl avec ListView provoque des problèmes de défilement

Mon problème est que le fait de faire défiler vers le haut ou vers le bas dans n'importe quel ListView affecte la position de tous les autres.

XAML:

<Window> 
    <Window.Resources> 
    <DataTemplate x:Key="TabHeaderTemplate"> 
     <TextBlock Text="{Binding Header}" /> 
    </DataTemplate> 
    <DataTemplate x:Key="TabItemTemplate"> 
     <ListView ItemsSource="{Binding Items}"> 
     <ListView.View> 
      <GridView> 
      <GridViewColumn Header="col1" DisplayMemberBinding="{Binding col1}" /> 
      <GridViewColumn Header="col2" DisplayMemberBinding="{Binding col2}" /> 
      </GridView> 
     </ListView.View> 
     </ListView> 
    </DataTemplate> 
    </Window.Resources> 

    <Grid> 
    <TabControl ItemsSource="{Binding Tabs}" ItemTemplate="{StaticResource TabHeaderTemplate}" ContentTemplate="{StaticResource TabItemTemplate}"/> 
    </Grid> 
</Window> 

code:

public class MyTab 
{ 
    public string Header { get; set; } 
    public ObservableCollection<MyItem> Items { get; set; } 
    public MyTab(int count) 
    { 
    Header = count.ToString(); 
    Items = new ObservableCollection<MyItem>(); 
    for (var i = 0; i < count; i++) 
     Items.Add(new MyItem {col1 = i.ToString(), col2 = i.ToString()}); 
    } 
} 

public class MyItem 
{ 
    public string col1 { get; set; } 
    public string col2 { get; set; } 
} 

public class MainViewModel 
{ 
    public ObservableCollection<MyTab> Tabs { get; set; } 
    public MainViewModel() { Tabs = new ObservableCollection<MyTab> {new MyTab(10), new MyTab(50)}; } 
} 

Étape 1: application Exécuter et sélectionnez le premier onglet
http://i53.tinypic.com/k06l2x.png
Étape 2: Sélectionnez deuxième onglet et faites défiler la liste vers le bas
http://i52.tinypic.com/28j8un9.png
Étape 3: Sélectionnez le premier onglet et montre que le ListView a fait défiler vers le bas http://i54.tinypic.com/6iseuv.png
Étape 4: Sélectionnez le deuxième onglet à nouveau et regarder que le ListView a fait défiler vers le haut http://i53.tinypic.com/2pr8qvp.png

Est-ce que quelqu'un sait comment résoudre ceci?

Répondre

0

Voici un filetage relatif à quelque chose de similaire qui a un fichier de démo (pas sûr que cela fonctionne). J'espère que cela vous aidera dans la bonne direction.

http://www.eggheadcafe.com/community/aspnet/14/10043253/scrolling-in-a-listview.aspx

objet MyItem = myList.Items [20]; myList.ScrollIntoView (myItem);

http://www.mvps.org/vbvision/_samples/Virtual_ListView_Demo.zip

+0

que les pourparlers de discussion sur le défilement à un élément spécifique. Je ne veux pas faire défiler, je veux empêcher ListViews de défiler automatiquement en premier lieu. Je suppose que ceci est lié à tous les TabItems utilisant le même DataTemplate, qui partage probablement l'état du ScrollViewer. Je ne sais pas comment résoudre ce problème:/ – snurre

+0

Qu'en est-il de l'encapsulation de chaque listview dans un présentateur de contenu? Au lieu de définir le contenu et le datatemplate sur le tabItem, il suffit de le faire sur ContentControl imbriqué ou ContentPresenter. Est-ce plus comme votre problème? http://www.netframeworkdev.com/windows-presentation-foundation-wpf/wpf-databound-tabcontrol-form-state-problem-31647.shtml – halfevil

+0

Je vois que vous avez copypassé la dernière réponse là-bas, et j'ai lu ce qu'il dit . Je n'arrive pas à comprendre comment traduire son petit exemple en XAML cohérent dans mon cas – snurre