WPF TabControl с привязкой к данным с ListView вызывает проблемы с прокруткой - PullRequest
3 голосов
/ 14 октября 2010

У меня есть приложение WPF, использующее TabControl, привязанное к коллекции класса MyTab.Каждый TabItem имеет ListView, связанный со свойством Items класса MyTab.

Моя проблема заключается в том, что прокрутка вверх или вниз в любом ListView влияет на положение всех остальных.

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>

Код:

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)}; }
}

Шаг 1: Запустите приложение и выберите первую вкладку
http://i53.tinypic.com/k06l2x.png
Шаг 2: Выберите вторую вкладку и полностью прокрутите вниз
http://i52.tinypic.com/28j8un9.png
Шаг 3: Выберите первую вкладку и проследите, чтобыListView прокрутился вниз http://i54.tinypic.com/6iseuv.png
Шаг 4: Снова выберите вторую вкладку и посмотрите, что ListView прокрутился вверх http://i53.tinypic.com/2pr8qvp.png

Кто-нибудь знает, как решитьэто?

1 Ответ

0 голосов
/ 14 октября 2010

Вот поток, относящийся к чему-то похожему, который имеет демонстрационный файл (не уверен, работает ли он) Надеюсь, это поможет вам в правильном направлении.

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

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

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

...