C# wpf itemlist未更新值
所以我有三件事:C# wpf itemlist未更新值,c#,.net,wpf,listbox,C#,.net,Wpf,Listbox,所以我有三件事: 窗口中的列表框 允许我访问可观察列表的数据库类 联系人实现INotifyChanged 在我的主窗口中,我有三个按钮(一个用于新建列表条目,一个用于编辑,一个用于删除项目) 我这样填写清单: lbKontakte.ItemsSource = DB.GetInstance().Kontakte; <TextBox Name="txtName" Grid.Column="1" Grid.Row="0" Margin="4" Text="{Binding Path=Nam
- 窗口中的列表框
- 允许我访问可观察列表的数据库类
- 联系人实现INotifyChanged
lbKontakte.ItemsSource = DB.GetInstance().Kontakte;
<TextBox Name="txtName" Grid.Column="1" Grid.Row="0" Margin="4" Text="{Binding Path=Name}"></TextBox>
而Kontakte是一个可观察的集合
我可以使用
DB.GetInstance().Kontakte.Add(New Kontakt(...));
DB.GetInstance().Kontakte.Remove(...);
或使用删除条目
DB.GetInstance().Kontakte.Add(New Kontakt(...));
DB.GetInstance().Kontakte.Remove(...);
Boh操作在列表框中立即可见
但是,如果我修改了一个值,我不会使用任何代码。我有一个绑定到联系人姓名字段的文本框。如果我对它进行更改,理论上应该立即对绑定的接触对象进行更改
但是,如果我修改了文本,则更改在列表框中不可见。如果我暂停代码并查看对象,我可以看到其名称字段已正确更改
为什么我的列表框没有更新
附言:
联系人使用以下代码实现INotifyChanged:
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
及
编辑:文本框不是主窗口的一部分,而是当用户单击编辑按钮时显示为对话框的窗口。然后,在构造函数中将selectedItem转换为Kontakt。像这样绑定到字段:
lbKontakte.ItemsSource = DB.GetInstance().Kontakte;
<TextBox Name="txtName" Grid.Column="1" Grid.Row="0" Margin="4" Text="{Binding Path=Name}"></TextBox>
在评论中回答正确,再次感谢 您的问题是,
observedcollection
如果您的物品属性发生了更改,而这是一个已知问题,则不会得到通知要解决此问题,您需要将您的
INotifyPropertyChanged
事件连接到CollectionChanged
事件,从observedcollection
您可以看到一个示例,说明如何执行此操作。您的问题是,如果您的项目属性发生更改,则不会收到通知。如何指定如何在列表框中显示项目?你使用DisplayMemberPath吗?那我该如何处理我的问题呢?波茨:我只使用我在问题中写的绑定。检查一下这个