Binding Button.Enabled для свойства в C # dll - PullRequest
0 голосов
/ 14 апреля 2011

В настоящее время я пишу C # dll для использования в качестве внутреннего движка для приложений с графическим интерфейсом (формы Windows), которые хотят его использовать.Двигатель может находиться в одном из нескольких предварительно определенных состояний, например, Загрузка, На холостом ходу, Работать и т. Д., Который контролируется специалистом по фону.Я хочу, чтобы приложения с графическим интерфейсом, которые используют эту dll, могли выполнять действия и привязывать свойства элемента управления к свойствам в движке, в частности к текущему состоянию, в котором находится движок. Например, я хочу, чтобы приложения, которые используют движок для отключения действий и элементов управления на основеот того, работает двигатель или нет.Чтобы сделать это, я создал свойство только для чтения в движке следующим образом:

public Class Engine
{
    // Make the class a singleton
    private static Engine instance;
    public static Engine Instance
    {
        get
        {
            if (instance == null)
                instance = new Engine();
            return instance;
        }
    }

    // ... Class code altering the engines current state

    public bool Property IsActive
    {
        get
        {
            return (EngineState != State.Idle);
        }
    }
}

Где State - перечислитель всех возможных состояний, а EngineState - текущее состояние.Чтобы проверить это свойство, я написал приложение для быстрой формы Windows, в котором я хочу, чтобы кнопка была включена, если движок активен.Чтобы сделать это, я попытался привязать свойство Enabled следующим образом:

public Class TestApp
{
    Engine MyEngine = Engine.Instance;

    TestApp
    {
        Button_DoAction.DataBindings.Add("Enabled", MyEngine, "IsActive");
    }

    // ... Button handlers etc.
}

Эта привязка, кажется, работает при первой загрузке приложения, но когда свойство IsActive изменяется внутри dll, т.е. Engine переходит из Active в Idleсвойство Enabled кнопки не изменяется.

Так что мне просто интересно, возможно ли то, что я пытаюсь сделать?Имеет ли значение тот факт, что Engine является синглтоном и записан во внешней DLL?Любая обратная связь будет отличной помощью.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

вашему движку необходимо реализовать System.ComponentModel.INotifyPropertyChanged

в интерфейсе есть событие ProperyChanged, которое ваш движок должен запустить, когда что-то изменилось (по крайней мере, если вы хотите, чтобы что-то отреагировало на это изменение)

см. MSDN http://msdn.microsoft.com/en-gb/library/system.componentmodel.inotifypropertychanged%28v=vs.95%29.aspx

0 голосов
/ 14 апреля 2011

Если вы используете формы Windows, так как текст предполагает, что вам нужно поднять событие или вручную откатить вызов делегата.

Затем форма может подписаться на событие / делегат и действовать соответственно.

Если вы используете WPF, как подсказывает код, примите совет DarkSquirrel42 и реализуйте интерфейс INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...