我正在使用带有网格视图和集合视图源的 SemanticZoom 控件。一切正常,直到我尝试选择(“跳转到”)一个空组 - 这会导致未处理的灾难性故障。
有谁知道是否有办法解决这个问题 - 如果可以的话,我想“允许”一个空组。
谢谢
我正在使用带有网格视图和集合视图源的 SemanticZoom 控件。一切正常,直到我尝试选择(“跳转到”)一个空组 - 这会导致未处理的灾难性故障。
有谁知道是否有办法解决这个问题 - 如果可以的话,我想“允许”一个空组。
谢谢
好的,所以我遇到了这个问题并修复了它。我知道这是一个相当古老的线程,但我会回答它以防其他人遇到这个问题。这就是我的做法。
问题似乎是该组设置为DestinationItem
需要在其中包含项目。在该组为空的情况下,这会造成问题。当组位于其他填充组之间时不会出现此问题,因为它的长度为 0,因此无法定位。当它在末尾(或者可能是开头,没有尝试过)时,这会带来一个问题,因为当鼠标经过视图末尾时/会针对列表中的最后一个。GridView
ListView
那么,如何解决它:
您需要为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
,插入您的集合属性。
我希望这对编码有所帮助和快乐!