observableCollection an eine Methode übergeben c#?

1 Antwort

Ich nehme an, dass die Collection im ViewModel liegt. Daher braucht das ViewModel eine Referenz auf die Instanz der anderen Klasse.

Ob du diese Instanz innerhalb der ViewModel-Klasse erstellst (sei es als Feld oder lokale Variable) oder irgendwo (z.B. dem Konstruktor) via Parameter überreichst, musst du dir selbst überlegen. Es gibt mehrere mögliche konkrete Varianten.

Die Collection kannst du als Parameter übergeben.

Ein Beispiel für ein mögliches Szenario:

class ViewModel
{
  private ObservableCollection<SomeData> _collection;

  private OtherClass _other;

  public ViewModel()
  {
    _collection = new ObservableCollection<SomeData>();
    // fill collection ...

    _other = new OtherClass();
    _other.DoSomething(_collection);
  }
}

class OtherClass
{
  public void DoSomething(ObservableCollection<SomeData> collection)
  {
    collection[0] = new SomeData(); // change collection
  }
}

Hier wird eine Instanz der Klasse OtherClass im ViewModel angelegt und in einem Feld gespeichert. Die Collection wird ihrer Methode DoSomething bei Aufruf als Parameter übergeben. Innerhalb der Methode erfolgt eine Änderung der Collection.

Einmal abgesehen von dem Anwendungsfall mit einem ViewModel gäbe es noch zwei andere Lösungswege:

a) Die Collection wird außerhalb beider Klassen definiert und später an die jeweiligen Instanzen (bspw. als Parameter für den Konstruktor) übergeben.

Beispiel:

var collection = new ObservableCollection<SomeData>();
var some = new SomeClass(collection);
var other = new OtherClass(collection);

b) Das Objekt, welches die Collection verändern soll, erhält eine Referenz auf die Trägerinstanz der Collection.

Beispiel:

class OtherClass
{
  private SomeClass _some;

  public OtherClass(SomeClass some)
  {
    _some = some;
  }

  public void DoSomething()
  {
    _some.Collection[0] = new SomeData(); // change collection
  }
}

class SomeClass
{
  public SomeClass()
  {
    Collection = new ObservableCollection<SomeData>();
  }

  public ObservableCollection<SomeData> Collection { get; }
}

Erneut zeigt das Beispiel nur eine von mehreren möglichen Varianten, wie man das konkret implementieren könnte. In diesem Szenario muss die Trägerinstanz der Collection via Parameter an den Konstruktor von OtherClass überreicht werden.