【问题标题】:Sliders in Windows Store app ListView are moving on their own accordWindows Store 应用程序 ListView 中的滑块正在自行移动
【发布时间】:2013-07-19 05:54:13
【问题描述】:

我已使用此 XAML 将一些项目数据绑定到我的 listView:

        <ListView x:Name="itemListView" ItemsSource="{Binding}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" >
                        <Slider Value="{Binding Intensity}" Width="300" Tag="{Binding Name}" />        
                        <TextBlock Text="{Binding Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

还有这个 C# 代码:

        public static ObservableCollection<PoliticalRegion> GetRegions()
        {
            ObservableCollection<PoliticalRegion> politicalRegions = new ObservableCollection<PoliticalRegion>()
                {
                    new PoliticalRegion() {Name = "Algeria", Intensity = 0},
                    new PoliticalRegion() {Name = "Angola", Intensity = 0},
                    new PoliticalRegion() {Name = "Benin", Intensity = 0},
                    new PoliticalRegion() {Name = "Chad", Intensity = 0},
                    new PoliticalRegion() {Name = "Cote_d_Ivoire", Intensity = 0},
                    new PoliticalRegion() {Name = "Djibouti", Intensity = 0},
                    new PoliticalRegion() {Name = "Egypt", Intensity = 0},
                };
            return politicalRegions;
        }
       itemListView.DataContext = GetRegions();

当我运行它并移动一些滑块时,其他一些滑块会自行偶尔移动。这是为什么呢??

【问题讨论】:

  • 你的意思是你也有其他滑块..如果是的话你可以发布任何这些滑块的 xaml 代码..
  • 好的,所以我不能 100% 确定,但我相信这与 ListView 虚拟化项目容器(以及随后的 DataContexts)有关。尝试将 ListView 的 ItemsPanel 更改为 StackPanel。这意味着您将失去虚拟化,如果您列出每个国家和/或地区,或者同时针对低级设备,这可能会很糟糕。您也可以尝试更改虚拟化模式。
  • @Nate 您实际上是正确的。虚拟化 ItemContainers 的 ListView 导致了问题。我可以通过将 ListView 放在 ScrollViewer 中来解决这个问题,从而禁用 ListView 的虚拟化。 listView 项目不多,因此对性能的影响很小。谢谢
  • 将您的解决方案添加为答案并将其标记为正确以供将来的提问者使用!

标签: c# xaml data-binding slider windows-store-apps


【解决方案1】:

虚拟化 ItemContainers 的 ListView 导致了问题。我可以通过将 ListView 放在 ScrollViewer 中来解决这个问题,从而禁用 ListView 的虚拟化。 listView 项目不多,因此对性能的影响很小。

这是更新后的 XAML。

<ScrollViewer>
    <ListView x:Name="itemListView" ItemsSource="{Binding}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" >
                    <Slider Value="{Binding Intensity}" Width="300" Tag="{Binding Name}" />        
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ScrollViewer>

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多