1

我正在使用 devexpress xaf 创建一个多平台应用程序。我有类“commonFields”,其中包含公共字段“creation_date,created_by”等。所有其他类都继承自这个类。我的问题是,在 detailView 布局中,公共字段显示在一组标记为 commonFields 中。

我知道可以使用模型编辑器解决这个问题,我只需右键单击组并选择取消组合,但如果我说超过 50 个表,我将不得不从 GUI 单独编辑所有布局。

我想知道是否有任何其他方式、方法或某些属性可以添加到将显示同一组中的继承字段的类中。

谢谢

4

2 回答 2

2

当然你可以通过代码做到这一点。这是 DevExpress 文档:Extended and Customize the Application Model in Code

ModelNodesGeneratorUpdater您需要为 XAF 模型的详细视图部分提供自己的。它应该看起来像这样:

public class MyDetailViewGeneratorUpdater : ModelNodesGeneratorUpdater<ModelDetailViewLayoutNodesGenerator> 
{
    public override void UpdateNode(ModelNode node) 
    {
        IModelDetailViewLayout layout = node as IModelDetailViewLayout;
        IModelDetailView detailView = (IModelDetailView)layout.Parent;
        if (!XafTypesInfo.Instance.FindTypeInfo(typeof(MyBase)).IsAssignableFrom(detailView.ModelClass.TypeInfo))   return;
        foreach (IModelDetailViewLayoutElement element in layout)
            UpdateLayoutItems(element, detailView.Items, XafTypesInfo.Instance.FindTypeInfo(typeof(MyBase)).FindMember("Description"));
    }

    private void UpdateLayoutItems(IModelDetailViewLayoutElement element, IModelDetailViewItems items, IMemberInfo member) {
        IModelLayoutItem item = element as IModelLayoutItem;
        IModelLayoutGroup group = element as IModelLayoutGroup;
        if(group != null){
            foreach(IModelDetailViewLayoutElement element1 in group)
            UpdateLayoutItems(element1, items, member);
        }
        else if (item != null) {
            RemoveFromGroup(item); // you just need to code this bit of magic
        }
    }
}

不要忘记在模块中注册您的更新程序:

public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters)
{
    base.AddGeneratorUpdaters(updaters);
    updaters.Add(new MyDetailViewGeneratorUpdater());
}
于 2015-02-05T17:00:28.660 回答
0

恐怕没有内置属性,但这里有一些方向:

首先,请务必阅读DevExpress 关于 Layout Customization 的官方建议

其次,检查 Xpand 框架的部分视图继承。肯定是一个强大的工具,但在上述情况下不一定会节省您的时间,但由于我不知道您所拥有的所有复杂性,这里有一个您可以指望的球员。

另外,您是否考虑过给分组布局一个机会?您可以找到使其具有吸引力和实用性的方法。检查如何使其可扩展: https ://www.devexpress.com/Support/Center/Question/Details/Q101774

如果上述解决方案都不能满足您的需求,并且您只需要在所有视图中取消分组以节省时间,请记住您可以直接编辑 xaf 的模型 XML 文件。在父对象属性之后生成的 LayoutGroups 在所有视图中具有相同的 ID,您可以在所有视图的这些组中巧妙地将 ShowCaption 设置为 false ;)。

于 2015-02-03T01:20:58.337 回答