Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Pivotviewer中绑定两个不同的集合源_C#_Silverlight_Data Binding_Silverlight 5.0_Pivotviewer - Fatal编程技术网

C# 在Pivotviewer中绑定两个不同的集合源

C# 在Pivotviewer中绑定两个不同的集合源,c#,silverlight,data-binding,silverlight-5.0,pivotviewer,C#,Silverlight,Data Binding,Silverlight 5.0,Pivotviewer,我试图了解如何在pivotviewer中管理两个集合之间的转换。集合具有相同的图像,只是处理了一个集合。我想让一个收藏消失在另一个收藏中 我知道如何定义不同的模板,通过固定maxwidth将一个模板消失到另一个模板中。例如,一旦放大300像素,就有了新模板,直到达到500像素,等等。我用来绑定我在后面的代码中加载的集合的代码如下: <pv:PivotViewerItemTemplate x:Key="firstTemplate" MaxWidth="300"> <!--

我试图了解如何在pivotviewer中管理两个集合之间的转换。集合具有相同的图像,只是处理了一个集合。我想让一个收藏消失在另一个收藏中

我知道如何定义不同的模板,通过固定maxwidth将一个模板消失到另一个模板中。例如,一旦放大300像素,就有了新模板,直到达到500像素,等等。我用来绑定我在后面的代码中加载的集合的代码如下:

<pv:PivotViewerItemTemplate x:Key="firstTemplate" MaxWidth="300">
    <!-- template layout -->
    <pv:PivotViewerMultiScaleSubImageHost CollectionSource="{Binding [VisualCollectionSource][0] }"  ImageId="{Binding [VisualImageId][0]}" />
    <!-- template layout -->
</pv:PivotViewerItemTemplate>


有没有我可以采用的解决方案?最佳做法是什么?

下面是一个保持已加载的CXML集合之间重叠的示例,而不是替换整个集合。因为在添加和删除对象时会有动画,所以看起来很不错。从服务器/后端请求更多/部分数据时非常有用。(当然,这与缩放时“淡入收藏/项目”无关。)

最有趣的代码是
KeepIntersection(此ICollection currentItems,CxmlCollectionSource newItems)
,它通过仅添加和删除旧集合和新集合的差异来修改集合

基于Silverlight 5 PivotViewer,根据和的教程/帖子

MainPageViewModel.cs
private void CxmlCollectionSource\u状态已更改(对象发送方,CxmlCollectionStateChangedEventArgs e)
{
//TODO:检查其他状态
开关(如NewState)
{
案例CxmlCollectionState.已加载:
{
var collection=发送方作为CxmlCollectionSource;
Assert(collection!=null,“collection!=null”);
//TODO:不添加/删除,在扩散后替换整个列表
如果(!this.pivotProperties.Any())
{
//TODO:属性的微分算法,最小更改
foreach(集合中的变量pivotViewerProperty.ItemProperties)
{
此.pivotProperties.Add(pivotViewerProperty);
}
}
this.pivotViewerItems.KeepIntersection(集合);
打破
}
}
}
ICollection{PivotViewerItem}Extensions.cs
名称空间SilverlightPivotViewer.Extensions
{
#区域使用指令
使用System.Collections.Generic;
使用System.Linq;
使用System.Windows.Controls.Pivot;
#端区
公共静态类ICollectionPivotViewerItemExtensions
{
#区域公共方法和运算符
公共静态无效保持段(
此ICollection currentItems、CxmlCollectionSource newItems)
{
删除当前唯一项(currentItems、newItems);
AddNewUniqueItems(currentItems,newItems);
}
#端区
#区域方法
私有静态void AddNewUniqueItems(ICollection currentItems、CxmlCollectionSource newItems)
{
IEnumerable onlyInNewCollection=
其中(pivotViewerItem=>currentItems.All(i=>i.Id!=pivotViewerItem.Id));
foreach(onlyInNewCollection中的var pivotViewerItem)
{
currentItems.Add(pivotViewerItem);
}
}
私有静态void RemoveCurrentUniqueItems(
ICollection currentItems、CxmlCollectionSource newItems)
{
仅IEnumerable当前集合=
其中(pivotViewerItem=>newItems.Items.All(i=>i.Id!=pivotViewerItem.Id));
//需要生成一个列表,否则它将崩溃(并发循环和编辑IEnumerable,或其他相关内容)
var onlyInCurrentCollectionList=onlyInCurrentCollection.ToList();
foreach(仅限CurrentCollectionList中的变量pivotViewerItem)
{
currentItems.Remove(pivotViewerItem);
}
}
#端区
}
}
  • 编码自定义扩散函数,但我肯定有人有一个很棒的库来做这件事
  • 也曾想过为刻面类别添加diffing,但它不是为它而构建的。我想推荐的方法是确保客户机知道所有可用的类别,以便它们可以用于过滤

下面是一个保持已加载的CXML集合之间重叠的示例,而不是替换整个集合。因为在添加和删除对象时会有动画,所以看起来很不错。从服务器/后端请求更多/部分数据时非常有用。(当然,这与缩放时“淡入收藏/项目”无关。)

最有趣的代码是
KeepIntersection(此ICollection currentItems,CxmlCollectionSource newItems)
,它通过仅添加和删除旧集合和新集合的差异来修改集合

基于Silverlight 5 PivotViewer,根据和的教程/帖子

MainPageViewModel.cs
private void CxmlCollectionSource\u状态已更改(对象发送方,CxmlCollectionStateChangedEventArgs e)
{
//TODO:检查其他状态
开关(如NewState)
{
案例CxmlCollectionState.已加载:
{
var collection=发送方作为CxmlCollectionSource;
Assert(collection!=null,“collection!=null”);
//TODO:不添加/删除,在扩散后替换整个列表
如果(!this.pivotProperties.Any())
{
//TODO:属性的微分算法,最小更改
foreach(集合中的变量pivotViewerProperty.ItemProperties)
{
此.pivotProperties.Add(pivotViewerProperty);
}
}
this.pivotViewerItems.KeepIntersection(集合);