WPF绑定在短时间使用后会自动失败
如果要编译并运行以下代码,就会发现选择和/或取消选择一行会导致将一行写入输出窗口(仔细检查所述代码会让人相信这一点) 在使用箭头键(分别按住向上和向下箭头以遍历整个数据集几次)短时间更改网格的选定行之后,人们会震惊地(就像我一样)注意到输出消息停止,即使在继续遍历网格的行时也是如此 我正试图实现类似于中给出的东西 我完全困惑不解。什么会导致网格上的绑定自动失败?如果您能在这里提供任何帮助,我们将不胜感激!!此外,如果有人有时间复制这一点,请评论你的发现 XAML:WPF绑定在短时间使用后会自动失败,wpf,data-binding,.net-4.0,Wpf,Data Binding,.net 4.0,如果要编译并运行以下代码,就会发现选择和/或取消选择一行会导致将一行写入输出窗口(仔细检查所述代码会让人相信这一点) 在使用箭头键(分别按住向上和向下箭头以遍历整个数据集几次)短时间更改网格的选定行之后,人们会震惊地(就像我一样)注意到输出消息停止,即使在继续遍历网格的行时也是如此 我正试图实现类似于中给出的东西 我完全困惑不解。什么会导致网格上的绑定自动失败?如果您能在这里提供任何帮助,我们将不胜感激!!此外,如果有人有时间复制这一点,请评论你的发现 XAML: <Window x:Cl
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<DataGrid Name="TheGrid">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="IsSelected"
Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True"
Binding="{Binding Name}" Header="Name"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
提前谢谢
编辑:
using System;
using System.ComponentModel;
using System.Linq;
using System.Windows;
namespace WpfApplication1 {
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
TheGrid.ItemsSource = Enumerable.Range(1, 100)
.Select(i => new MyClass("Item " + i));
}
}
public class MyClass : INotifyPropertyChanged {
public string Name { get; private set; }
private bool m_IsSelected;
public bool IsSelected {
get {
return m_IsSelected;
}
set {
if (m_IsSelected != value) {
m_IsSelected = value;
Console.WriteLine(Name + ": " + m_IsSelected);
PropertyChanged(this,
new PropertyChangedEventArgs("IsSelected"));
}
}
}
public MyClass(string name) {
Name = name;
}
public event PropertyChangedEventHandler PropertyChanged =
delegate { };
}
}
- 已尝试应用
使用RowStyleSelector设置样式 属性-失败DataGridRow
- 尝试使用
和Row\u加载
事件-失败来应用Row\u卸载
样式DataGridRow
- 尝试使用自定义-失败(无法与DataGrid控件一起使用)
- 尝试设置
-失败(速度非常慢,有数百行)虚拟化StackPanel.isvirtualization=“False”
- 尝试混用
(标准或回收)-失败虚拟化StackPanel。虚拟化模式
必须有某种纯粹的MVVM,开箱即用的解决方案,但到目前为止,我还是找不到 我刚试过这个,也有同样的行为。我可以通过更改DataGrid来解决这个问题,以防止其虚拟化,如下所示:
有关更多信息,请参见此。太棒了!我想知道在虚拟化关闭的情况下,我的网格将如何处理大型数据集。。。不管怎么说,这都奏效了!谢谢只是在一个大数据集上尝试了一下,过滤需要花费很多时间!你知道如何在打开虚拟化的情况下避免这种行为吗?你可以尝试重新打开虚拟化-有两种模式可以让另一种模式工作:VirtualizengStackPanel.VirtualizationMode=标准和RecyclingVirtualization行为有时真的很奇怪-确保你的数据网格不在scrollviewer中。我没有页面上的任何显式滚动查看器。(很明显,网格的内容会自动滚动到许多项目中)。我能够崩溃,而双击有时会使其返回,很明显,排序行也是如此。可能与虚拟化有关。最主要的问题是,我无法使用DataGrid控件以MVVM为中心进行多项选择(SelectedItems是只读的,因此不可绑定)。这家伙的解决方案似乎正是我所需要的:尽管我还没有实现它。一旦我有了工作(或不工作…),我会回复。我在之前的评论中链接的解决方案根本不适用于WPF DataGrid控件,所以。。。没有骰子。这个问题有解决办法吗?被接受的答案对我不起作用,如果我在一个新系统中克隆代码,它可以进行一些尝试