Buttons in einer Liste speichern und suchen (WPF)?


11.10.2021, 20:33

Bzw. kann ich auch die Buttons in der Liste nach ihrem x:Namen suchen.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ich würde nicht die Buttons in einer Liste speichern, sondern nur einen Command an sie binden. Der Command kann dann ein internes Array ändern.

Im ViewModel hast du ungefähr solche Elemente:

public CellState[] CellStates { get; set; }

public ICommand OnCellClickCommand = new RelayCommand<string>(indexData => {
  int.Parse(indexData, out int index);
  // set CellStates[index] ...
  CheckForWinner();
});

Für CellState könntest du ein Enum definieren:

public enum CellState { O, X, None }

Und im View seht ein Button ungefähr so aus:

<Button Command="{Binding OnCellClickCommand}" CommandParameter="0" Grid.Column="0" Grid.Row="0" />

Der CommandParameter kann angeben, wo sich der Button befindet. Entweder du nummerierst von 0-8 durch und verwendest ein eindimensionales Array oder du verwendest die natürlichere Abbildung mit einem zweidimensionalen Array und übergibst an den Command Werte wie 0-0, die du dann aber etwas aufwendiger parsen musst (siehe Split-Methode der String-Klasse).

Bei obiger Variante könnte man übrigens auch direkt im View schon einen Integer übergeben. Du müsstest den System-Namespace referenzieren

xmlns:system="clr-namespace:System;assembly=mscorlib"

und könntest den Parameter dann so aufführen:

<Button Command="{Binding OnCellClickCommand}" Grid.Column="0" Grid.Row="0">
  <Button.CommandParameter>
    <system:Int32>0</system:Int32>
  </Button.CommandParameter>
</Button>