麦克风,
我通过包装 windows 控件并捕获包装 windows 网格的选择更改事件解决了这个问题。
在您的控件中,连接控件的 Loaded 事件,并在加载时将布尔私有成员变量设置为 true。然后,当您捕获内部数据网格的选择更改事件时,如果您的控件已加载,则仅引发您自己的选择更改事件。完成后,您现在可以返回 OnApplyTemplate 子程序,将内部数据网格的选定索引设置为 -1,将选定项设置为空。由于索引和项目的设置将在您的控件完成加载之前发生,因此不会触发选择更改事件。我在选项卡式和非选项卡式环境中都试过这个,它似乎没有问题。现在来解决一个更难的问题,您可能已经注意到,当您对 windows 数据网格进行排序时(当它是绑定到 ItemsSource 的数据时),它总是选择显示数据的顶部项目。这当然会触发选择更改事件,并移动到以前未选择的项目,据我所知,不应选择。要处理这个问题,您将不得不做一些更棘手的编码。如果您注意到,当您捕获内部网格的选择更改事件并查看其所选项目时,只有少数情况下所选项目未设置为任何内容,即当不再选择项目时(即. 选择被清除),或者当(提示)列正在排序时。当你在排序时,有两个事件会触发,第一个是取消选择项目(SelectedItem is Nothing),第二个是选择列表中的顶部项目(SelectedIndex 0)。现在,如果您要在事件处理程序中为内部网格选择更改事件放置一个标志,并发现该项目什么都不是,您可以跟踪先前的选定项目,然后设置内部数据网格的选定项目到之前选择的项目。
这很好地解决了问题,并且在包装 Windows 控件时可能会出现不希望的结果,但据我所知,这似乎是解决在加载问题时选择第一行的唯一方法。然而,我只能想象,这将在某个时候由 M$ 解决。
我希望这有帮助,
谢谢,
斯科特