Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf itemlist未更新值_C#_.net_Wpf_Listbox - Fatal编程技术网

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吗?那我该如何处理我的问题呢?波茨:我只使用我在问题中写的绑定。检查一下这个