2

我有一个棱镜区域:

<ItemsControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.AdministrationCommandsRegion}">
    <ItemsControl.ItemTemplate>
        ...
    </ItemsControl.ItemTemplate>
</ItemsControl>

我正在添加视图模型以使用区域管理器:

_regionManager.Regions[RegionNames.AdministrationCommandsRegion].Add(new CommandViewModel("User Management", new DelegateCommand(RequestNavigate));

CommandViewModel看起来像这样:

public class CommandViewModel
{
    public CommandViewModel(string displayName, ICommand command)
    {
        if (command == null) throw new ArgumentNullException("command");

        DisplayName = displayName;
        Command = command;
    }

    public string DisplayName { get; private set; }
    public ICommand Command { get; private set; }
}

我想指定CommandViewModels区域中的顺序,但我找不到指定ViewSortHint属性的方法,CommandViewModel以便每个实例都不同。有什么方法可以将 ViewSortHint 传递给构造函数CommandViewModel而不是依赖属性?

4

1 回答 1

3

您可以使用Region 的属性ViewSortHint来解决排序问题,而不是使用属性。SortComparison

SortComparison属性可以设置为Comparison<object>委托方法,以便对ViewModel进行排序。

this._regionManager.Regions["MyRegion"].SortComparison = CompareViewModels;

这种比较可以在SortIndex实现的属性上进行,例如,ISortable相关ViewModels上的接口。因此,委托方法会比较ISortable SortIndex属性:

private static int CompareViewModels(object x, object y)
{
  ISortable xSortable = (ISortable) x;
  ISortable ySortable = (ISortable) y;
  return xSortable.SortIndex.CompareTo(ySortable.SortIndex);
}

最后,您可以将SortIndex值传递给ViewModel构造函数并为每个实例设置ISortable属性。

您可以在以下 Prism 指南章节中找到更多信息:

希望这可以帮助。

于 2013-10-02T16:52:30.680 回答