2012-02-28 24 views
4

仮想化が有効なListViewコントロールに奇妙な問題があります。私は問題を再現するために非常に小さなパイロットアプリを作成しました。リストビューのいくつかのテキストボックスに何かを入力してからスクロールダウンすると、数ページ後に、入力された値が以下のテキストボックスで繰り返されます。ここでリサイクルモードでListView仮想化の値が繰り返されます

は、ウィンドウのXAMLです:

<Window x:Class="WpfApplication3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Grid Name="mainGrid"> 
     <ListView ItemsSource="{Binding Path=DemoList}" > 

      <VirtualizingStackPanel.IsVirtualizing> 
       True 
      </VirtualizingStackPanel.IsVirtualizing> 
      <VirtualizingStackPanel.VirtualizationMode> 
       Recycling 
      </VirtualizingStackPanel.VirtualizationMode> 

      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <TextBox MinHeight="20" MinWidth="200" Margin="4"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 

     </ListView> 

    </Grid> 
</Window> 

そしてビハインドコード:

namespace WpfApplication3 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      demolist a = new demolist(); 
      mainGrid.DataContext = a; 
     } 
    } 

    public class demolist 
    { 
     public demolist() 
     { 
      DemoList = new List<string>(); 

      for (int i = 0; i <= 5000; i++) 
      { 
       DemoList.Add("sss"); 
      } 
     } 
     public List<string> DemoList { get; set; } 
    } 
} 

そして問題についての画面キャプチャ: http://kepfeltoltes.hu/120228/Capture1_www.kepfeltoltes.hu_.png

は、任意のオプションがありますこの問題を解決するには?私はそれがリサイクルモードに関連していると思うが、これは正常な動作ではないはずだ。確かに奇妙な効果だが、リサイクルモードプラスあなたは何にもTextBox.Textプロパティを結合していないという事実に起因すると思われます、事前に

おかげで、

イシュト

答えて

1

(名前の変更のため申し訳ありませんが)、このようにコードを変更し

、すべてがうまくする必要があります:あなたの答えのための

public class RecyclingListViewModel 
{ 
    public RecyclingListViewModel() 
    { 
     Items = new List<DataItem>(); 

     for (int i = 0; i <= 5000; i++) 
     { 
      Items.Add(new DataItem{Id = i, Name = i.ToString(CultureInfo.InvariantCulture)}); 
     } 
    } 

    public List<DataItem> Items { get; set; } 
} 

public class DataItem 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

<ListView ItemsSource="{Binding Path=Items}" > 
<TextBox MinHeight="20" MinWidth="200" Margin="4" Text="{Binding Name}"/> 
+0

感謝。あなたのコードは正しく実行されます。つまり、リサイクルモードはコントロールのすべてをバインドする場合にのみ使用できます。 – kexx

関連する問題