Более простая альтернатива для доступа к главному объекту из вложенного списка в XAF

Я хочу знать, есть ли простой и понятный метод, отличный от этого, для доступа к главному объекту из вложенного контроллера просмотра списка.

((PropertyCollectionSource)((ListView)View).CollectionSource).MasterObject

Должен ли я написать это везде, где мне нужен доступ к главному объекту?

Я думаю, что это не элегантный способ, и выглядит так хромать.

2 ответа

Решение

Пока не проверено, но вы можете использовать следующий потомок ViewController:

public class NestedViewController : ViewController
{
    protected PropertyCollectionSource PropertyCollectionSource
    {
        get
        {
            return View is ListView ? ((ListView)View).CollectionSource is PropertyCollectionSource ? ((ListView)View).CollectionSource as PropertyCollectionSource : null : null;
        }
    }

    protected object MasterObject
    {
        get
        {
            return PropertyCollectionSource != null ? PropertyCollectionSource.MasterObject : null;
        }
    }
}

Упрощение ответа выше с C#6

public partial class NestedViewController : ViewController
{
    protected PropertyCollectionSource PropertyCollectionSource => (View as ListView)?.CollectionSource as PropertyCollectionSource;

    protected object MasterObject => PropertyCollectionSource?.MasterObject;
}

Также я переместил это в функцию

public static class HandyControllerFunctions
{
    public static object GetMasterObject(View view)
    {
        var propertyCollectionSource = (view as ListView)?.CollectionSource as PropertyCollectionSource;
        return propertyCollectionSource?.MasterObject ;
    }
}

и назовите это например

var myObject = HandyControllerFunctions.GetMasterObject(View) as IMyObject

Другие вопросы по тегам