我正在使用带有网格视图和集合视图源的SemanticZoom控件。一切正常,直到我尝试选择('跳转到')一个空组 - 这会导致未处理的灾难性故障。
有没有人知道是否有办法解决这个问题 - 如果可以,我想'允许'空组。
由于
答案 0 :(得分:0)
好的,所以我遇到了这个问题并修复了它。我知道这是一个很老的线程,但我会回答它以防其他人遇到这个问题。我就是这样做的。
问题似乎是设置为DestinationItem
的群组需要包含项目。在该组为空的情况下,这会产生问题。当组在其他已填充的组之间时,不会出现问题,因为它的长度为0,因此无法定位。当它结束时(或者可能是开始时,还没有尝试过),这会产生一个问题,因为GridView
/ ListView
指向列表中的最后一个鼠标时超过视图的结尾。
那么,如何解决它:
您需要为OnViewChangeStarted
添加事件处理程序。在此处理程序中,您将可以访问SemanticZoomViewChangedEventArgs
。
您需要做的第一件事是找出targetted
组是否为空。我在这里使用自定义Group
课程,但已将其投放到IEnumerable
,因为我只需知道其中有多少项目。 Linq
允许我查找IEnumerable
的计数。
using System.Linq;
private void Zoom_OnViewChangeStarted(object sender, SemanticZoomViewChangedEventArgs e)
{
var group = e.DestinationItem.Item as IEnumerable;
if (group != null && group.Count() == 0)
{
e.DestinationItem.Item = MyViewModel.Groups.Last(itemGroup => itemGroup.Count() > 0);
}
}
正如您将注意到的,下一步是将DestinationItem.Item
设置为包含项目的Last
组。您可能还想处理包含项目的First组,但这也很容易。代替MyViewModel
,插入ViewModel
。代替Groups
,插入您的集合属性。
我希望这有助于编码的快乐!