如何在Prism/MEF中的ItemsControl中对视图进行排序?

Sam*_*Sam 5 wpf prism mef

我用prism v4和MEF来加载我的模块.我的模块包含一些视图(MVVM),它们由MEF自动加载到ItemsControl/NavigationRegion中.

这很好用,所有项目都显示在ItemControl中.但我不喜欢他们表现的顺序.一个模块可能包含多个项目,因此更改模块加载顺序本身是不够的.

如何在ItemsControl中对不同的视图进行排序?是否有办法按某些财产对它们进行排序?

由于StockTraderRI示例中的属性,我使用棱镜V4,MEF和探索.

Jes*_*det 10

这实际上是Prism4的结果.只需将ViewSortHintAttribute应用于您的视图:

[ViewSortHint("100")]
class FirstView : UserControl { }

[ViewSortHint("200")]
class SecondView : UserControl { }
Run Code Online (Sandbox Code Playgroud)

区域上的默认排序比较器将获取此属性并相应地对视图进行排序.您可以将任何字符串放入属性中,但我倾向于使用中等大小的数字,这样我就可以轻松地在现有字符之间添加新视图.

  • 继上面的评论之后,我通过定义一个`Sort.Order`附加属性(类型`int`),然后是一个利用它的`SortingRegionBehavior`来解决这个问题.最后,我的引导程序将此行为注册为默认行为,因此所有区域都将获得它.到目前为止我发现的唯一限制是事后不会反映对`Sort.Order`属性的更改,但我很确定如果我需要它,我可以添加对我的区域行为的支持. (2认同)