Более простая альтернатива для доступа к главному объекту из вложенного списка в 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