gpt4 book ai didi

c# - 在 MVVM (WPF) 中访问 Grid.Children.Add

转载 作者:行者123 更新时间:2023-12-03 10:27:05 24 4
gpt4 key购买 nike

所以我有这个想法,在一个网格中添加几个按钮,然后排列它们,添加的按钮数量与我输入的数字有关。一切正常,直到我尝试让它在 MVVM 下工作。

在 MainWindow.xaml.cs 中工作的代码:

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

所以基本上,我按下一个按钮,它会添加 3x3 按钮,颜色很好,分布得当。但后来我到了 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);
}
}

}

这里我有一个按钮列表,它应该接受新创建的按钮,然后将它们传输到网格。按钮列表代码:
 private List<Button> _bslist = new List<Button>();
public List<Button> somebuttonlist
{
get
{
return _bslist;
}
set
{
_bslist = value;
NotifyPropertyChanged();

}
}

和 xaml 代码:
 <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>

不要介意所有的绑定(bind),当我使用非 MVVM 格式时它们可以正常工作。
那么如何正确地将工作代码转移到 View 模型中呢?有没有办法相应地访问 child ?

最佳答案

看起来您正在绑定(bind)到 List ,它不会通知何时插入新记录或删除任何记录。 NotifyPropertyChanged()只有在修改对该列表的引用时才会启动,例如,将其设置为 new List()或不同的List .尝试将其更改为 ObservableCollection相反,它发送一个 event当集合中的记录数被修改时。

关于c# - 在 MVVM (WPF) 中访问 Grid.Children.Add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com