如何更新Petrel窗口的名称?

时间:2013-06-14 20:48:43

标签: c# ocean petrel

我正在尝试在Save事件后更新Petrel窗口的名称/显示名称。

我实现了自己的NameInfo类,该类继承自NameInfo抽象类。

 public class MyNameInfo : NameInfo
    {
        private string name = string.Empty;
        private string displayName = string.Empty;
        private string typeName = string.Empty;

        public override bool CanChangeName
        {
             get { return true; } //I return true so I can change the name at runtime.
        }
        //Rest of the class implementation
     }

我的DisplayName,Name和TypeName必须相同,所以当名称改变时,我的代码是:

public override string Name
        {
            get { return this.name; }
            set
            {
                name = value;
                displayName = value;
                typeName = value;
                OnNameChanged(this);
            }
        }

我在DataSourceManager的“已保存”事件中更改了我的窗口名称:

DataManager.DataSourceManager.Saved += OnSave;

我用来更新名称的代码是:

if(NameInfo.CanChangeName)
     NameInfo.Name = NewName;

但是当我更改名称时,它只会在 Windows 窗口的树中更新。

我的窗口名称显示旧名称。

我不知道我还需要做些什么来实现我想要的目标。

我的窗口是一个自定义窗口

public class MyCustomWindow : ToggleWindow, INameInfoSource, IDeletable 
{

有没有办法更新Window Name本身?

我是否必须订阅我的“MyCustomWindow”才能参与某些活动而我不这样做?

我真的很感谢你能给我的任何帮助!

1 个答案:

答案 0 :(得分:3)

如何在自定义窗口中创建NameInfo?您需要将自定义窗口对象传递给MyNameInfo,以便可以在自定义窗口对象上调用OnNameChanged(窗口)。这是一个例子:

private MyNameInfo nameInfo = null;
public NameInfo NameInfo
{
  get
  {
    if (null == nameInfo)
    {
      nameInfo = new MyNameInfo(this);
    }
    return nameInfo;
  }
}

然后在MyNameInfo的Name属性的setter中,

set
{
   name = value;
   displayName = value;
   typeName = value;
   OnNameChanged(this.window);
}