将View添加到ItemsControl区域的顶部

时间:2012-12-20 15:33:03

标签: wpf mvvm prism itemscontrol

我在复合Prism MVVM应用程序中有一个ItemsControl区域

<ItemsControl Regions:RegionManager.RegionName="NotificationRegion" AllowDrop="True" ClipToBounds="True" HorizontalAlignment="Right" Margin="0,40,20,20" Width="280" />

现在我想在这个区域显示我的NotificationViews,如下所示: enter image description here

我只是导航到视图,然后将它们添加到我的ItemsControl区域。但问题是新的View总是被添加到底部。我真的希望在顶部显示新的视图。有没有办法实现这个目标?非常感谢你提前。

1 个答案:

答案 0 :(得分:1)

我认为你会发现这有帮助:Sorting views in Prism/MEF

基本上:

public MainView( ) 
    {
        InitializeComponent( );

        ObservableObject<IRegion> observableRegion = RegionManager.GetObservableRegion( ContentHost );

        observableRegion.PropertyChanged += ( sender, args ) =>
        {
            IRegion region = ( (ObservableObject<IRegion>)sender ).Value;
            region.SortComparison = CompareViews;
        };
    }

    private static int CompareViews( object x, object y )
    {
        IPositionView positionX = x as IPositionView;
        IPositionView positionY = y as IPositionView;
        if ( positionX != null && positionY != null )
        {
            //Position is a freely choosable integer
            return Comparer<int>.Default.Compare( positionX.Position, positionY.Position );
        }
        else if ( positionX != null )
        {
            //x is a PositionView, so we favour it here
            return -1;
        }
        else if ( positionY != null )
        {
            //y is a PositionView, so we favour it here
            return 1;
        }
        else
        {
            //both are no PositionViews, so we use string comparison here
            return String.Compare( x.ToString( ), y.ToString( ) );
        }
    }

您会注意到该区域具有SortComparison属性。您只需要为首先订购最新视图的区域创建自定义SortComparison。