编辑:
简单回答:是的,确实如此。每次Combobox_SelectionChanged
被触发时,我都发现了错误,即添加了另一个事件处理程序。因此,该集合看起来很好,但Items_CollectionChanged
被多次触发。一旦修复,一切正常
结束编辑。
我有一个带有组合框和网格的页面。当组合框中的选择发生变化时,网格会动态填充。我现在正在观察一件奇怪的事情。当我在组合框中第二次选择一个值时,网格中的子项目会出现两次。我检查了底层集合,看起来很好(即每个项目只有一个记录)。当我跳出combobox_SelectionChanged方法时,在Grid.Children.Clear()
命令之后,屏幕看起来很好,即空。
我的猜测是,Grid.Children.Clear()
仅从可视树中删除了控件,但实际的控件仍然悬而未决。任何想法?
private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
grItems.Children.Clear();
grItemsColumnDefinitions.Clear();
grItemsColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(200) });
}
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
grItems.Children.Add(new ChildItemControl(e.NewItems[0]));
}
}
答案 0 :(得分:1)
我建议你使用WPF的内置数据绑定。你可以使用这样的东西:
<DataGrid x:Name="grItems" ItemsSource="{Binding comboboxItems}" />
然后,当您更新comboboxItems
时,您的网格也会自动更新!
这是一篇关于使用DataGrid控件进行数据绑定的精彩文章:
http://www.wpftutorial.net/DataGrid.html
有关数据绑定的更多信息,请参阅以下文章:https://msdn.microsoft.com/en-us/library/aa480224.aspx