2012-02-28 46 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

是否有任何選項解決這個問題?我想這與回收模式有關,但我認爲這不應該是正常行爲。

由於提前,

伊什特萬

回答

1

這當然一個奇怪的效果,但它似乎是由於回收模式加上其實你不是TextBox.Text屬性綁定到任何東西。

更改您這樣的代碼(對不起,名字的變更),所有應該很好:

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 2012-02-29 09:36:15