2011-09-09 30 views
2

我有一个Silverlight PivotViewer启动并运行,约有4000个项目。以编程方式设置PivotViewer的过滤器

我将querystring参数传递给托管PivotViewer的页面,以在打开时过滤项目。

如何以编程方式向PivotViewer添加过滤器?

我已经试过:

pvtTest.AppliedFilters.Add(new KeyValuePair<string, IList<string>>("Color", new List<string> { "EQ.Green", "EQ.Red" })); 

,但它仍然显示的所有项目。我也试着在使用UI设置一些过滤器后检查AppliedFilters属性的值是什么,但它仍然只包含我在上面添加的过滤器。

+0

发现它...您可以通过使用ViewerState属性指定过滤器。它有一个特定的语法,可以在这里看到:http://www.silverlight.net/content/pivotviewer/developer-info/api/html/P_System_Windows_Pivot_PivotViewer_ViewerState.htm – grimstoner

回答

1

您可以使用ViewerState属性指定过滤器。

它有一个非常具体的语法,可以找到here

1

我觉得grimstoner的答案可能不够清楚。

确实可以使用ViewerState属性设置过滤器,但不能直接设置它,因为它只有一个公共getter。解决方法是使用LoadCollection()方法传递已加载集合的URI和修改后的查看器状态。您可能期望Pivot Viewer将重新加载集合,但事实并非如此。它足够聪明地检测到相同的URI并且仅适用于新的查看器状态。

例子:

string viewerState = pivotViewer.ViewerState; 

// Modify the viewer state according to the rules defined at: 
// http://www.silverlight.net/content/pivotviewer/developer-info/api/html/P_System_Windows_Pivot_PivotViewer_ViewerState.htm 

pivotViewer.LoadCollection(pivotViewer.CollectionUri.ToString(), viewerState); 

我希望这可以帮助其他有同样问题。

+0

请注意,这不适用于最新版本的数据透视查看器。没有'LoadCollection'方法:http://msdn.microsoft.com/en-us/library/system.windows.controls.pivot.pivotviewer(v=vs.95).aspx – McGarnagle

2

对于PivotViewer-2

string sFilter = pvViewer.Filter; //get existing filter 

pvViewer.ItemsSource = new-data-source; //assign new data source 

pvViewer.Filter = sFilter; //reassign filter 
+0

垃圾,这个作品 - 谢谢。我基本上花了整整一天的时间来解决这个问题,并基本放弃了。 – McGarnagle

相关问题