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(グリッド)を更新するテキストボックスがあります。ただし、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 に答える