Значение виртуализации ListView, повторяющееся в режиме переработки - PullRequest
4 голосов
/ 28 февраля 2012

У меня странная проблема с включенной виртуализацией элемента управления 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 Ответ

1 голос
/ 29 февраля 2012

Это, конечно, странный эффект, но, похоже, это связано с режимом рециркуляции, а также с тем фактом, что вы ни к чему не привязываете свойство 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}"/>
...