请原谅我的英语不好,我会尽我最大的努力。
说明这个想法是创建一个“foo”的数据库1,用户可以添加/删除/编辑对象。(foo包含一个唯一的ID)这个database 1随后在程序中用于填充第二种类型的Collection。我们称之为Database 2。Database 2包含从用户选择的一个对象foo继承的元素。由于用户可以编辑对象foo,因此我可以将修改发送到Database 2以保持对象更新。但是,我有两个嵌套循环。随着数据库的增长,我可能会遇到性能问题。(我不想通过引用传递foo的属性(这会更容易),因为foo是版本化的。用户可以选择是否更新最终对象)
我想要的为了避免这种情况,我希望Database 1是〈int,foo〉的Dictionary(int是foo的唯一ID)。通过使用Dictionary,我认为检查修改的过程会更快,因为我不需要迭代Database 1
问题我有一个ObservableCollection的第一个版本绑定到一个正常工作的数据网格(用户可以添加/删除/编辑对象foo,并且更改会正确反映在UI上)。为了在Dictionary中实现Database 1,我做了所有的修改,现在我面临的唯一问题是这些修改没有反映在UI上
只有当我更改选项卡并返回时,或者当我按列对数据网格进行排序时,UI才会更新,但不会实时更新(在添加元素后直接更新)
是否有一种方法可以在字典中实现NotifyPropertyChanged或类似的东西?我怎么能那么做?
这就是数据库1public Dictionary<int, ToolType> DicToolType { get; set; } = new Dictionary<int, ToolType>();
用户控件中的数据上下文设置正确
这就是XAML。所有绑定都很好。从另一个对话框添加新元素
<DataGrid ItemsSource="{Binding DicToolType}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn FontSize="12" Width="60"
Header="T" Binding="{Binding Key}"/>
<DataGridTextColumn FontSize="12" Width="100"
Header="Name" Binding="{Binding Value.Name}"/>
<DataGridTextColumn FontSize="12" Width="90"
Header="Type" Binding="{Binding Value.Type}"/>
</DataGrid.Columns>
</DataGrid>
1条答案
按热度按时间to94eoyn1#
经过一段时间的研究,我找到了解决方案。
我创建了一个名为“ObservableDictionary”的新类,实现了INotifyCollectionChanged & IDictionary〈TKey,TValue〉
现在添加新项会反映在UI中
Implementing INotifyCollectionChanged interface
https://social.msdn.microsoft.com/Forums/en-US/2ec0c111-0682-49c8-a9d8-ae374328ea2e/bind-observable-dictionary?forum=wpf