0

我有一个实现 inotifypropertychaned 的类。

public class Item : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    private string _name = string.Empty;

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            this._name = value;
            onPropertyChanged(this, "Name");
        }
    }

    private void onPropertyChanged(object sender, string property)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(sender, new PropertyChangedEventArgs(property));

        }
    }
}

在 UI 中,我有一个文本框,其中当长度超过时会发生 textchanged 事件,并更新绑定上述类的可观察集合的 UI(网格)。但用户界面没有更新。

    ObservableCollection<Item> lstItem = null;


private void textBox1_TextChanged(object sender, EventArgs e)

    {
        try
        {
            if (textBox1.Text.Length > 4)
            {
                Item obj = new Item();
            obj.Name = textBox1.Text;
            lstItem = new ObservableCollection<Item>();
            dataGridView1.DataSource = lstItem;
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message.ToString());
        }
    }

谢谢。

4

1 回答 1

0

看看这段代码:

Item obj = new Item();
obj.Name = textBox1.Text;
lstItem = new ObservableCollection<Item>();
dataGridView1.DataSource = lstItem;

您每次都将数据源设置为一个空集合Item,并且您正在创建一个新集合,然后再次将其丢弃。您是否打算将该项目添加到集合中?

lstItem = new ObservableCollection<Item> { obj };

(目前还不清楚您是否应该创建一个新集合甚至一个新项目 - 也许您应该使用类似的东西:

lstItem[0].Name = textBox1.Text;

反而?)

于 2012-08-17T12:27:34.593 回答