2017-02-16 2 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;} 
} 

Ziel:, wenn der Spiele-Spieler mehr als 2, Ich mag würde Sportunter Variable bis 10.Zugang Geordnete Ebene Objekt

Frage aktualisieren: Wie kann ich die übergeordnete Klasse zugreifen und die Sportklassenvariable aktualisieren?

+2

Dies ist ein ziemlich triviales Problem, das möglicherweise auf viele verschiedene Arten gelöst werden könnte. Bitte können Sie uns Code von dem zeigen, was Sie versucht haben und warum es nicht funktioniert hat. – Ben

+0

Willkommen bei StackOverflow. Wenn eine der Antworten hilfreich für Sie war, können Sie sich die [how-does-accepting-an-answer-work] (http://meta.stackexchange.com/questions/5234/how-does-accepting) ansehen -eine-Antwort-Arbeit) –

Antwort

0

Sie könnten ein Ereignis verwenden, das der Klasse Activity signalisiert, dass es Zeit für die Aktualisierung ist.

In der Activity-Klasse können Sie das Ereignis im Konstruktor registrieren und die notwendige Aktualisierung in den Event-Handler schreiben. In Ihrem Fall Unter bis 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 Ich sah nur den Tag INotifyPropertyChanged. Natürlich können Sie auch diese Schnittstelle und das bereitgestellte Ereignis verwenden. Implementieren Sie die Schnittstelle als die folgenden:

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")); 
      }     
     } 
    }   
} 

Und in dem Activity Klassenbuch wieder auf das Ereignis im Konstruktor:

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

und erklärt den Körper der Event-Handler:

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

Und _Sports.sub wird automatisch aktualisiert. Ich hoffe es hilft. Es gibt natürlich andere Möglichkeiten, dieses Update durchzuführen. Es ist nur der erste, der mir in den Sinn kam

0

Sie müssen eine Instanz von Activity erstellen. Sie müssen auch _Sports darin initialisieren

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

Oder Objekt tantalizer mit

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

activity._Sports.sub = 10; 

By the way, ist Activity nicht übergeordnete Klasse von sports. Activity enthält sports Objekt als Mitglied. In Ihrem Beispiel ist PropertyChangedBase die Elternklasse von .