|
4
|
| Mike Schall · 技术社区 · 17 年前 |
|
|
1
3
您是否尝试过在用户控件的构造函数中将布尔字段(例如bool dataGridFirstLoad)设置为false。 然后在DataGrid的SelectionChanged事件中,检查dataGridFirstLoad是否为false。如果将false设置为true,并将SelectedItem设置为null。 希望这能有所帮助。 |
|
|
2
1
迈克, 我通过包装窗口控件并捕获包装窗口网格的选择更改事件来解决了这个问题。 在控件中,连接控件的Loaded事件,并在加载时将布尔私有成员变量设置为true。然后,当您捕获内部数据网格的选择更改事件时,只有在控件已加载的情况下,才能引发您自己的选择更改。完成此操作后,您现在可以返回到OnApplyTemplate子目录,并将内部数据网格的选定索引设置为-1,将选定项设置为无。由于索引和项的设置将在控件加载完成之前进行,因此选择更改事件不会触发。我在标签和非标签环境中都尝试过这个方法,它似乎没有问题。现在来看一个更难的问题,您可能已经注意到,当您对窗口数据网格进行排序时(当它是绑定到Items Source的数据时),它总是选择显示数据的顶部项目。当然,这将触发选择更改事件,并移动到以前未选择的项目,据我所知,该项目不应被选择。为了处理这个问题,你必须做一些更棘手的编码。如果您注意到,当您捕获内部网格的选择更改事件并查看其选定项目时,只有少数情况下选定项目未设置为任何值,即当不再选择项目时(即选择被清除),或者当(HINT)列正在排序时。排序时,会触发两个事件,第一个是取消选择项目(SelectedItem为Nothing),第二个是选择列表中的顶部项目(SelectedIndex 0)。现在,如果你在内部网格选择更改事件的事件处理程序中放置一个标志,并捕捉到该项为空的事实,你可以跟踪之前选择的项,然后将内部数据网格的选定项设置为之前选择的项目。 这很好地解决了这个问题,并且在包装窗口控件时可能会出现不希望的结果,但据我所知,这似乎是解决加载时选择第一行问题的唯一方法。然而,我只能想象,在某个时候,这将被固定在M美元。 我希望这能有所帮助, 谢谢, 斯科特 |
|
|
3
1
这与上面的帖子类似(并分析了Paulo T的建议)。这很有效。 //在xaml或构造函数中设置selectionchanged处理程序 //我的页面上有两个网格,所以我为每个网格创建了一个布尔属性
|
|
|
4
0
下面的代码应该可以做到这一点(每当更新/刷新网格时,将JustRefreshed设置为true):
|
|
|
5
0
由于DataGrid的代码可以从微软获得,我们删除了选择,所以我们不必绕过它。我相信这不再是Silverlight 3.0网格的问题。 |