我正在使用devexpress xaf来创建一个多平台应用程序。我有班级' commonFields'其中包含公共字段" creation_date,created_by"所有其他类都继承自此类。我的问题是,在详细的View布局中,公共字段显示在一个标记为commonFields的组中。
我知道可以使用模型编辑器解决这个问题,我只需右键单击该组并选择取消组合,但如果我说超过50个表,我将不得不从GUI单独编辑所有布局。 / p>
我想知道是否有任何其他方法,方法或某些属性我可以添加到类中,它将在同一组中显示继承的字段。
三江源
答案 0 :(得分:2)
当然可以通过代码完成。以下是DevExpress文档:Extend and Customize the Application Model in Code。
您需要为XAF模型的详细视图部分提供自己的ModelNodesGeneratorUpdater
。看起来应该是这样的:
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());
}
答案 1 :(得分:0)
我担心这里没有内置属性,但这里有一些方向:
首先,请务必阅读oficial DevExpress recomendations about Layout Customization。
其次,检查Xpand框架的partial view inheritance。 当然是一个强大的工具,但不会在上面描述的情况下节省你的时间,但由于我不知道你所拥有的所有复杂性,这里有一个你可以信赖的玩家。
另外,您是否考虑过给出分组布局的机会?您可以找到使其具有吸引力和实用性的方法。检查如何使其可扩展: https://www.devexpress.com/Support/Center/Question/Details/Q101774
如果上述解决方案均无法满足您的需求,您只需节省在所有视图中取消组合的时间,请记住您可以直接编辑xaf的模型XML文件。父对象属性在所有视图中具有相同ID后生成的LayoutGroups,您可以在所有视图的这些组中巧妙地将ShowCaption设置为false;)。