0

我正在使用带有网格视图和集合视图源的 SemanticZoom 控件。一切正常,直到我尝试选择(“跳转到”)一个空组 - 这会导致未处理的灾难性故障。

http://social.msdn.microsoft.com/Forums/nb-NO/winappswithcsharp/thread/6535656e-3293-4e0d-93b5-453864b95601

有谁知道是否有办法解决这个问题 - 如果可以的话,我想“允许”一个空组。

谢谢

4

1 回答 1

0

好的,所以我遇到了这个问题并修复了它。我知道这是一个相当古老的线程,但我会回答它以防其他人遇到这个问题。这就是我的做法。

问题似乎是该组设置为DestinationItem需要在其中包含项目。在该组为空的情况下,这会造成问题。当组位于其他填充组之间时不会出现此问题,因为它的长度为 0,因此无法定位。当它在末尾(或者可能是开头,没有尝试过)时,这会带来一个问题,因为当鼠标经过视图末尾时/会针对列表中的最后一个GridViewListView

那么,如何解决它:

您需要为OnViewChangeStarted. 在此处理程序中,您将可以访问SemanticZoomViewChangedEventArgs.

您需要做的第一件事是找出 Group 是否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,插入您的集合属性。

我希望这对编码有所帮助和快乐!

于 2013-07-19T20:33:40.370 回答