wpf项目列表不更新值

时间:2013-03-22 10:40:30

标签: c# .net wpf listbox

所以我有三件事:

  • 窗口中的ListBox
  • 允许我访问ObservableList的DataBase类
  • 联系工具INotifyChanged

在我的主窗口中,我有三个按钮(一个用于新列表条目,一个用于编辑,一个用于删除项目)

我填写这样的列表:

lbKontakte.ItemsSource = DB.GetInstance().Kontakte;

而Kontakte是一个ObservableCollection

我可以使用

创建一个新条目
DB.GetInstance().Kontakte.Add(New Kontakt(...));

或使用

删除条目
DB.GetInstance().Kontakte.Remove(...);

Boh动作在ListBox中立即可见。

如果我修改了一个值,我没有使用任何代码。我有一个TextBox,它绑定到联系人的Name字段。如果我对其进行更改,理论上应该立即对绑定的联系对象执行更改。

但是,如果我确实修改了文本,则更改不会在ListBox中显示。如果我暂停代码并查看对象,我可以看到其名称字段已正确更改。

我的ListBox怎么没有更新?

PS: Contact确实使用以下代码实现INotifyChanged:

public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, e);
        }
    }

public String Name
    {
        get { return _name; }
        set { _name = value; OnPropertyChanged(new PropertyChangedEventArgs("Name")); }
    }

编辑:文本框不是主窗口的一部分,但如果用户单击编辑按钮,则窗口显示为对话框。然后,Window将在构造函数中将selectedItem转换为Kontakt。像这样绑定到场:

<TextBox Name="txtName" Grid.Column="1" Grid.Row="0" Margin="4" Text="{Binding Path=Name}"></TextBox>

public KontaktAddUI(Kontakt kontaktToEdit)
    {
        InitializeComponent();
        this.kontaktToEdit = kontaktToEdit;
        this.MainGrid.DataContext = kontaktToEdit;
    }

评论中的正确答案,再次感谢!

1 个答案:

答案 0 :(得分:1)

如果您的商品属性发生了已知问题,则您的问题ObservableCollection无法收到通知。要解决此问题,您需要将INotifyPropertyChanged事件连接到来自CollectionChanged

ObservableCollection事件

Here你可以看到一个如何做到这一点的例子。