Wpf ListView虚拟化值在回收模式下重复

Wpf ListView虚拟化值在回收模式下重复,wpf,listview,virtualization,recycle,Wpf,Listview,Virtualization,Recycle,我对启用虚拟化的ListView控件有一个奇怪的问题。我创建了一个非常小的试点应用程序来重现这个问题。当我在listview中为几个文本框键入内容,然后向下滚动时,在几页之后,键入的值会在下面未触及的文本框中重复 以下是窗口的XAML: 真的 回收 以及背后的代码: namespace WpfApplication3 { public partial class MainWindow : Window { public MainWindow()

我对启用虚拟化的ListView控件有一个奇怪的问题。我创建了一个非常小的试点应用程序来重现这个问题。当我在listview中为几个文本框键入内容,然后向下滚动时,在几页之后,键入的值会在下面未触及的文本框中重复

以下是窗口的XAML:


真的
回收
以及背后的代码:

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; }
    }
}
命名空间WpfApplication3
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
demolist a=新的demolist();
mainGrid.DataContext=a;
}
}
公共类人口统计
{
公共人口名单()
{
DemoList=新列表();

对于(inti=0;i来说,这当然是一个奇怪的效果,但这似乎是由于回收模式加上您没有将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}"/>
公共类回收列表视图模型
{
公共回收列表视图模型()
{
项目=新列表();

对于(inti=0;我感谢您的回答。您的代码执行正确,这意味着只有当您绑定控件上的所有内容时,才能使用回收模式。