2014-01-09 2 views
1

Я программирую в C# (WPF). У меня есть переменные Boolean в моем классе, например isConnected или isBusy. Я хочу определить event и event handler для них, когда меняют свои булевы переменные, я запускаю метод.Событие, когда boolean is true

Я искал и нашел некоторые вещи, но я не могу их понять.

Вы могли бы помочь мне написать его?


Update 1:

наконец я пишу это, но я получаю StackOverFlowExeception, которые могут быть вызваны рекурсии. что не так?

public event EventHandler IsConnectedChanged; 

    public bool IsConnected 
    { 
     get { return IsConnected; } 
     set 
     { 
      IsConnected = value; 
      CheckAndCallHandlers(); 
     } 
    } 



    private void CheckAndCallHandlers() 
    { 
     EventHandler handler = IsConnectedChanged; 
     if (IsConnected) 
      handler(this, EventArgs.Empty); 
    } 
+1

Это помогает тем, кто мог бы ответить на ваш вопрос, если вы говорите, что вещи, которые вы нашли, и что ты не понял. –

+0

. У .NET уже есть интерфейс, который вы можете использовать для этого. См. Http://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx для использования 'INotifyPropertyChanged'. – Steve

ответ

2

Wrap переменную в свойствах, а затем в инкубаторе для свойств можно вызвать метод, который проверяет, если оба true. Когда это условие выполнено, то вы можете сделать дополнительную работу:

public class SomeClass 
{ 
    private bool _isConnected; 
    private bool _isBusy; 

    public event EventHandler SomeCustomEvent; 

    public bool IsConnected 
    { 
     get { return _isConnected; } 
     set 
     { 
      _isConnected = value; 
      CheckAndCallHandlers(); 
     } 
    } 

    public bool IsBusy 
    { 
     get { return _isBusy; } 
     set 
     { 
      _isBusy = value; 
      CheckAndCallHandlers(); 
     } 
    } 

    private void CheckAndCallHandlers() 
    { 
     var handler = SomeCustomEvent; 
     if(IsConnected && IsBusy && handler != null) 
      handler(this, EventArgs.Empty); 
    } 
} 
+0

Благодарим за помощь, но мне нужно определить событие, подобное MouseClick. –

+0

@ Babak.Abad - Вы можете сделать именно это, используя этот метод. Вы определяете событие на своем классе, позволяете людям регистрировать обработчики, а затем вызываете эти обработчики при выполнении условий. –

+0

@ Babak.Abad - Обновлен на примере. –

1

сделать это свойство

bool _isConnected; 
bool isConnected 
{ 
    get { return _isConnected; } 
    set { 
    if (value != _isConnected) //it's changing! 
    { 
     doSomething(); 
    } 

    _isConnected = value; //Could do this inside the if but I prefer it outside because some types care about assignment even with the same value. 
    } 
} 
+0

Благодарим вас за помощь, но мне нужно определить событие, подобное MouseClick. –

Смежные вопросы