【问题标题】:Inotify propertychanged not updatingInotify propertychanged 不更新
【发布时间】:2012-08-17 12:20:05
【问题描述】:

我有一个实现 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(网格)。但 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());
        }
    }

谢谢。

【问题讨论】:

    标签: windows-phone-7 observablecollection inotifypropertychanged


    【解决方案1】:

    看看这段代码:

    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;
    

    相反?)

    【讨论】:

    • 是的,我打算添加。但是如果我添加一个类的对象。它几乎是一个直截了当的 ryt。那么在类(项目)中使用 inotifypropertychanged 的​​需要是什么。使用它是否合理?
    • @BharathNadadur:我不确定您所说的“直接 ryt”是什么意思 - 但如果您没有修改已显示的 existing 对象的属性,通知任何人财产变化真的没有多大意义......因此我的答案的底部。
    • 这个 lstItem[0].Name = textBox1.Text 给出了“索引超出范围异常”
    • 这部分代码总是显示 null 并且它没有进入 if 循环 if (handler != null)
    • @BharathNadadur:好吧,我假设您将使用初始值填充集合,这将解决第一个问题。然后我期望当您绑定集合时,控件将订阅属性通知处理程序...
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2017-02-17
    • 2013-04-25
    相关资源
    最近更新 更多