2017-02-16 14 views
0
public class Activity 
{ 
    public games _Games {get;set;} 
    public sports _Sports {get;set;} 
} 

public class games : PropertyChangedBase 
{ 
    public int player 
    { 
     get; 
     set; //have if- else statement 
    } 
} 

public class sports : PropertyChangedBase 
{ 
    public int sub{get;set;} 
} 

Цель: когда игры игрок больше чем 2, я хотел бы обновить спортивные переменную югу до 10.доступа объект Уровня Родителя

Вопрос: Как я могу получить доступ к родительскому классу и обновить переменную спортивного класса?

+2

Это довольно тривиальная проблема, которая потенциально может быть решена разными способами. Пожалуйста, вы можете показать нам код того, что вы пробовали, и почему он не работает. – Ben

+0

Добро пожаловать в StackOverflow. Если какой-либо из ответов был полезен для вас, вы можете взглянуть на [how-do-accepting-a-answer-work] (http://meta.stackexchange.com/questions/5234/how-does-accepting -ан-ответ-работа) сообщение –

ответ

0

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

public class games 
{ 
    public event UpdatePlayerSubDelegate UpdatePlayerSub; 

    public delegate void UpdatePlayerSubDelegate(); 
    private int _player; 

    public int player 
    { 
     get { return _player; } 
     set 
     { 
      _player = value; 
      if (_player > 2) 
      { 
       // Fire the Event that it is time to update 
       UpdatePlayerSub(); 
      }     
     } 
    }   
} 

В классе Activity вы можете зарегистрировать событие в конструкторе и записать в обработчик события необходимое обновление. В вашем случае к югу до 10:

public class Activity 
{ 
    public games _Games { get; set; } 
    public sports _Sports { get; set; } 

    public Activity() 
    { 
     this._Games = new games(); 
     this._Games.UpdatePlayerSub += _Games_UpdatePlayerSub; 
     this._Sports = new sports(); 
    } 

    private void _Games_UpdatePlayerSub() 
    { 
     if (_Sports != null) 
     { 
      _Sports.sub = 10; 
     } 
    } 
} 

EDIT Я только что видел тег INotifyPropertyChanged. Конечно, вы также можете использовать этот интерфейс и предоставленное событие. Реализовать интерфейс, как:

public class games : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private int _player; 
    public int player 
    { 
     get { return _player; } 
     set 
     { 
      _player = value; 
      if (_player > 2) 
      { 
       // Fire the Event that it is time to update 
       PropertyChanged(this, new PropertyChangedEventArgs("player")); 
      }     
     } 
    }   
} 

И в регистре Activity класса снова к событию в конструкторе:

public Activity() 
{ 
    this._Games = new games(); 
    this._Games.PropertyChanged += _Games_PropertyChanged; 
    this._Sports = new sports(); 
} 

и объявить тело обработчика событий:

private void _Games_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (_Sports != null) 
    { 
     _Sports.sub = 10; 
    } 
} 

И _Sports.sub будет обновляться автоматически. Надеюсь, поможет. Конечно, есть и другие способы сделать это обновление. Это только первый, о котором я пришел.

0

Вам необходимо создать экземпляр Activity. Кроме того, необходимо инициализировать _Sports в нем

Activity activity = new Activity(); 
activity._Sports = new sports(); 
activity._Sports.sub = 10; 

Или с помощью объекта tantalizer

Activity activity = new Activity 
{ 
    _Sports = new sports() 
}; 

activity._Sports.sub = 10; 

Кстати, Activity не родительский класс sports. Activity проводит sports объект в качестве участника. В вашем примере PropertyChangedBase является родительским классом games.

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