在运行时更改DisplayName(桌面客户端)

时间:2014-10-03 12:32:37

标签: visual-studio-lightswitch

属性DisplayName可以在设计时在各种对象(如实体,属性等)上更改。 我想在Desktop Client中更改运行时的DisplayName。 对于某些对象来说,它很容易,例如屏幕或实体:它们明确提供了一个属性。

对于实体属性,它有点不同。 如果程序员在设计时明确添加了显示名称,我只能更改DisplayName。

这段代码完美无缺:

IServiceProxy sproxy = VsExportProviderService.GetExportedValue<IServiceProxy>();
IModuleDefinition module = sproxy.ModelService.Modules.Where(m => m.Id == "LightSwitchApplication.Localization.DesktopClient:!module").SingleOrDefault();
IEnumerable<IGlobalItem> items = module.GlobalItems;
var entities = items.OfType<EntityType>().Where(e => e.Name == "CoreApplication");
foreach (var entity in entities)
{
    DisplayName dn;

    foreach (var property in entity.Properties)
    {
        dn = property.Attributes.OfType<DisplayName>().SingleOrDefault();
        if (dn != null)
        {
            dn.value = Helper.CreateNewValue();
        }

    }
}

但是如果dn为null,我怎么能添加新的DisplayName而不会在稍后阶段遇到异常,例如在保存操作期间?

感谢您的帮助。

汉斯

1 个答案:

答案 0 :(得分:0)

不是解决您的具体问题,而是可能的解决方法。

如果你要在屏幕上创建一个局部变量(比如myLabelString),你应该能够将它拖到屏幕控制树中的适当位置,然后将dataBind()你想要的属性值的值拖到使用PostRender()事件在运行时到HTML元素。您可以使用$(element).replaceWith(“&lt; ..&gt;”+ contentItem.stringValue +“”)任意格式化此元素,然后只需关闭相关字段的标题。

e.g。这将检测变量值的变化并更新屏幕上的标签控件,将其渲染为H3元素。

myapp.MyScreen.myLabelString_postRender() = function (element, contentItem) {
    contentItem.dataBind ("stringValue", function (newValue) {
        contentItem.stringValue = newValue.ToString();
    });
    $(element).replaceWith("<h3>" + contentItem.stringValue + "</h3>");
}

有关数据绑定的更多信息,请参阅http://blogs.msdn.com/b/lightswitch/archive/2012/12/06/custom-controls-and-data-binding-in-the-lightswitch-html-client-joe-binder.aspx

希望有所帮助!