25

文字列プロパティと List プロパティを持つ単純なクラスがあり、INofityPropertyChanged イベントが実装されていますが、文字列 List に .Add を実行すると、このイベントはヒットしないため、ListView に表示するコンバーターはヒットしません。私は、変更されたプロパティがリストへの追加でヒットしないと推測しています....どうすれば、プロパティが変更されたイベントをヒットさせる方法でこれを実装できますか???

他のタイプのコレクションを使用する必要がありますか?!

助けてくれてありがとう!

namespace SVNQuickOpen.Configuration
{
    public class DatabaseRecord : INotifyPropertyChanged 
    {
        public DatabaseRecord()
        {
            IncludeFolders = new List<string>();
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        protected void Notify(string propName)
        {
            if (this.PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }
        #endregion

        private string _name;

        public string Name
        {
            get { return _name; }

            set
            {
                this._name = value;
                Notify("Name");
            }
        }

        private List<string> _includeFolders;

        public List<string> IncludeFolders
        {
            get { return _includeFolders; }

            set
            {
                this._includeFolders = value;
                Notify("IncludeFolders");
            }
        }
    }
}
4

4 に答える 4

47

ObservableCollection<string>の代わりに を使用する必要がありますList<string>。これは、 とは異なりListObservableCollection内容が変更されたときに依存関係に通知するためです。

あなたの場合、私は_includeFolders読み取り専用にします - コレクションの 1 つのインスタンスをいつでも操作できます。

public class DatabaseRecord : INotifyPropertyChanged 
{
    private readonly ObservableCollection<string> _includeFolders;

    public ObservableCollection<string> IncludeFolders
    {
        get { return _includeFolders; }
    }

    public DatabaseRecord()
    {
        _includeFolders = new ObservableCollection<string>();
        _includeFolders.CollectionChanged += IncludeFolders_CollectionChanged;
    }

    private void IncludeFolders_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        Notify("IncludeFolders");
    }

    ...

}
于 2011-12-12T05:09:42.643 に答える
10

WPF のリスト バインディングを機能させる最も簡単な方法は、 を実装するコレクションを使用することINotifyCollectionChangedです。ここで行う簡単なことは、リストをObservableCollection.

を使用ObservableCollectionすると、リストを変更するたびに CollectionChanged イベントが発生します。これは、WPF バインディングに更新を指示するイベントです。実際のコレクション オブジェクトを交換する場合は、実際のコレクション プロパティの propertychanged イベントを発生させる必要があることに注意してください。

于 2011-12-12T05:04:20.220 に答える
4

リストは NotifyPropertyChanged イベントを自動的に発生させません。

プロパティを公開する WPF コントロールは、項目が追加または削除されると自動的に更新れるにItemsSourceバインドされるように設計されています。ObservableCollection<T>

于 2011-12-12T05:04:17.153 に答える
3

ObservableCollectionをご覧ください

于 2011-12-12T05:04:22.630 に答える