【问题标题】:ListView Virtualization value repeating in Recycling ModeListView 虚拟化值在回收模式下重复
【发布时间】:2012-03-18 06:00:44
【问题描述】:

启用虚拟化的 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

有没有办法解决这个问题?我猜这与回收模式有关,但我认为这不应该是正常行为。

提前致谢,

伊斯特万

【问题讨论】:

    标签: wpf listview virtualization recycle


    【解决方案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}"/>
    

    【讨论】:

    • 感谢您的回答。您的代码正确执行,这意味着只有在您绑定控件上的所有内容时才能使用回收模式。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2010-09-25
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2011-07-21
    相关资源
    最近更新 更多