2011-01-16 2 views
1

Учитывая класс, как показано ниже:Вызов сеттер, когда любое свойство класса изменяется

public class LoginInfo 
{ 
    public int UserId; 
    public string Username; 
} 

и другой класс

public class OtherClass 
{ 
    public static LoginInfo Info 
    { 
     get 
     { 
      return SessionBll.GetLoginInfo(someInt); 
     } 
     set 
     { 
      SessionBll.UpdateLoginInfo(value, someInt); 
     } 
    } 
} 

и с учетом этого:

OtherClass.LoginInfo.Username = "BillyBob"; 

Как я могу позвонить LoginInfo сеттер, когда изменяется свойство LoginInfo? Я знаю, что могу:

LoginInfo info = OtherClass.LoginInfo; 
info.Username = "BillyBob"; 
OtherClass.LoginInfo = info; 

, но я хочу сделать это без этих трех линий. Я хочу, чтобы быть автоматическим

Благодаря

Законченными подписавшись на событие в классе LoginInfo

ответ

3

Попробуйте следующие поправки к классу

public class LoginInfo : INotifyPropertyChanged 
{ 
    private int _userID; 
    private string _UserName; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public int UserId 
    { 
     get { return this._userID; } 
     set 
     { 
      if (value != this._userID) 
      { 
       this._userID = value; 
       NotifyPropertyChanged("UserID"); 
      } 
     } 
    } 

    public string Username 
    { 
     get { return this._UserName; } 
     set 
     { 
      if (value != this._UserName) 
      { 
       this._UserName = value; 
       NotifyPropertyChanged("UserName"); 
      } 
     } 
    } 

    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

Затем в другом классе вы должны иметь ссылку на класс LOGINFO и подписаться на PropertyChangedEvent.

_privateLogInfo.PropertyChanged += new PropertyChangedEventHandler(methodToBeCalledToHandleChanges); 

Затем обрабатывать любые изменения в methodToBeCalledToHandleChanges.

+0

В настоящее время у OtherClass есть только статические элементы. Будет ли это проблемой? –

+0

Я думаю, что это должно быть нормально, пока ссылка на объект loginfo и метод, который вы используете для обработки изменений, также являются статическими. –

+0

hmm ya, проблема в том, что _there нет ссылки на класс loginfo, кроме свойства, которое вы видите в моем вопросе. Не думайте, что мой мозг еще работает ... –

5

Есть много разных подходов. Самый простой способ состоит в том, чтобы LoginInfo реализовать INotifyPropertyChanged и иметь OtherClass подписаться на событие PropertyChanged, а затем вы можете обработать обработчик событий при необходимости.

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

+0

На MSDN INotifyPropertyChanged обычно ссылается в контексте привязки данных. Можно ли использовать это в другом контексте? –

+0

@ subt13: Все в порядке. Обратите внимание: если вы чувствуете дискомфорт, вы можете определить свой собственный интерфейс с тем же эффектом. – jason

+0

Звучит хорошо для меня. Если не так много проблем, можете ли вы опубликовать фрагмент кода, который может выглядеть в OtherClass? –

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