0

我正在尝试在 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 
{

有没有办法更新窗口名称本身?

我是否必须将我的“MyCustomWindow”订阅到某个事件而我没有这样做?

我将非常感谢您为我提供的任何帮助!

4

1 回答 1

3

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

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

然后在 MyNameInfo 的 Name 属性的设置器中,

set
{
   name = value;
   displayName = value;
   typeName = value;
   OnNameChanged(this.window);
}
于 2013-06-17T12:25:06.393 回答