Wpf 导致减速的命令
首先,我完全知道这个例子有多么做作,它缺乏虚拟化,但我用它来演示我在一个更复杂的系统中遇到的一个问题,这个问题很难表现出来。这似乎是一个简单的证明方法 下面的代码创建了一个菜单和一个ItemsControl,绑定到一个大的Strings列表,我使用10000,每个都被看作一个按钮Wpf 导致减速的命令,wpf,performance,command,Wpf,Performance,Command,首先,我完全知道这个例子有多么做作,它缺乏虚拟化,但我用它来演示我在一个更复杂的系统中遇到的一个问题,这个问题很难表现出来。这似乎是一个简单的证明方法 下面的代码创建了一个菜单和一个ItemsControl,绑定到一个大的Strings列表,我使用10000,每个都被看作一个按钮 <DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="Test"> &l
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="Test">
<MenuItem Header="A" />
<MenuItem Header="B" />
<MenuItem Header="C" />
</MenuItem>
</Menu>
<Expander IsExpanded="True">
<ScrollViewer>
<ItemsControl ItemsSource="{Binding LotsOfStrings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="Open" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Expander>
</DockPanel>
正如所料,加载速度很慢,但一旦加载,“测试”菜单就会响应,也就是说,当您将鼠标移到菜单项上时,不会出现明显的延迟
现在对向按钮添加命令进行以下小更改
<Button Content="Open" Command="Open"/>
现在菜单变得非常滞后。出于某种原因,将鼠标移到不同的菜单项上会调用CommandManager.InvalidateRequestySuggested,该命令将针对每个按钮执行,从而导致速度减慢
所以我想知道是否有任何方法可以在不可见的控件上禁用命令更新?因此,在本例中,如果扩展器被折叠,我可以告诉您如何停止按钮继续处理命令更新吗?您可以发布与您的问题相关的命令代码吗,谢谢。这是使用了一个实际上没有做任何事情的命令,can Execute始终为true,Execute没有做任何事情。但这似乎不是问题所在,我认为问题在于指挥基础设施在幕后做了大量工作