0

コレクションをバインドするためのWPFListViewがあります。このコレクションのオブジェクトのプロパティは、バックグラウンドスレッドで変更されます。プロパティが変更されたときにListViewを更新する必要があります。オブジェクトのプロパティを変更しても、SourceUpdatedイベントは発生しません。

PS ItemSourceをnullに設定してから再バインドすることは、適切ではありません。

4

2 に答える 2

3

これは自動である必要があり、オブジェクトのコンテナとしてObservableCollectionを使用する必要があり、オブジェクトのクラスはINotifyPropertyChangedを実装する必要があります(変更があったことをリストビューに通知するプロパティのパターンを実装するだけです)

MSDN

于 2010-11-22T16:26:15.717 に答える
2

INotifyPropertyChangedセッターがプロパティで呼び出されたときに、オブジェクトが必要な変更通知を実装して発生させることを確認してください。

// This is a simple customer class that 
// implements the IPropertyChange interface.
public class DemoCustomer  : INotifyPropertyChanged
{
    // These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    private string customerNameValue = String.Empty;
    private string phoneNumberValue = String.Empty;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    // The constructor is private to enforce the factory pattern.
    private DemoCustomer()
    {
        customerNameValue = "Customer";
        phoneNumberValue = "(555)555-5555";
    }

    // This is the public factory method.
    public static DemoCustomer CreateNewCustomer()
    {
        return new DemoCustomer();
    }

    // This property represents an ID, suitable
    // for use as a primary key in a database.
    public Guid ID
    {
        get
        {
            return this.idValue;
        }
    }

    public string CustomerName
    {
        get
        {
            return this.customerNameValue;
        }

        set
        {
            if (value != this.customerNameValue)
            {
                this.customerNameValue = value;
                NotifyPropertyChanged("CustomerName");
            }
        }
    }

    public string PhoneNumber
    {
        get
        {
            return this.phoneNumberValue;
        }

        set
        {
            if (value != this.phoneNumberValue)
            {
                this.phoneNumberValue = value;
                NotifyPropertyChanged("PhoneNumber");
            }
        }
  }
}

代わりに、コレクションに追加/削除されているアイテム(言及していません)を参照している場合は、コレクションがObservableCollection<T>

于 2010-11-22T16:35:46.197 に答える