So habe ich die Idee, mehrere Schaltflächen zu einem Raster hinzufügen, dann ordnen sie, und die Anzahl der Schaltflächen hinzugefügt, um eine Nummer, die ich eingeben. Alles funktioniert gut, bis ich versuche, es unter MVVM arbeiten zu lassen.Zugriff auf Grid.Children.Add in MVVM (WPF)
Code, der in der MainWindow.xaml.cs funktioniert:
private void Button_Click(object sender, RoutedEventArgs e)
{
int i = 0, j = 0;
Brush[] bs = { Brushes.BurlyWood, Brushes.Honeydew };
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
Button btn = new Button();
btn.Height = 50;
btn.Width=50;
btn.SetValue(Grid.RowProperty, i);
btn.SetValue(Grid.ColumnProperty, j);
if ((i + j) % 2 == 0)
{
btn.Background=bs[0];
}
else btn.Background = bs[1];
GameGrid.Children.Add(btn);
}
}
}
Also im Grunde, drücke ich auf einen Knopf und es fügt 3x3 Tasten, farbige schön und angemessen verteilt. Aber dann komme ich zum MVVM:
private void ButtonClickCommand()
{
RowCount = GridNumber;
ColumnCount=GridNumber;
int i = 0, j = 0;
Brush[] bs = { Brushes.BurlyWood, Brushes.Honeydew };
for (i = 0; i < GridNumber; i++)
{
for (j = 0; j < GridNumber; j++)
{
Button btn = new Button();
btn.Height = 50;
btn.Width = 50;
// btn.Command = StartCommand; Ill add that later
btn.SetValue(Grid.RowProperty, i);
btn.SetValue(Grid.ColumnProperty, j);
if ((i + j) % 2 == 0)
{
btn.Background = bs[0];
}
else btn.Background = bs[1];
somebuttonlist.Add(btn);
}
}
}
Hier habe ich eine Liste der Tasten, die das neu erstellte Schaltflächen annehmen sollen, übertragen sie dann an das Netz. Code der Schaltfläche Liste:
private List<Button> _bslist = new List<Button>();
public List<Button> somebuttonlist
{
get
{
return _bslist;
}
set
{
_bslist = value;
NotifyPropertyChanged();
}
}
Und XAML-Code:
<ItemsControl ItemsSource="{Binding somebuttonlist}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="GameGrid" Visibility="{Binding GameVis}"
vm:GridHelpers.RowCount="{Binding RowCount}"
vm:GridHelpers.ColumnCount="{Binding ColumnCount}">
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
nicht alle Bindungen Stört es, sie richtig funktionieren, wenn ich das nicht-MVVM-Format verwenden. Wie kann ich den Arbeitscode ordnungsgemäß in das View Model übertragen? Gibt es eine Möglichkeit, die Kinder entsprechend zu erreichen?
Nun, das hat funktioniert: D Danke, ich muss noch viel lernen – NamelessCoder