文字列プロパティとリストプロパティを持つ単純なクラスがあり、INofityPropertyChangedイベントを実装していますが、文字列リストに.Addを実行すると、このイベントがヒットしないため、ListViewに表示するコンバーターがヒットしません。 Add to the Listで変更されたプロパティがヒットしないと思います...プロパティ変更イベントヒットを取得する方法でこれを実装するにはどうすればよいですか?
他のタイプのコレクションを使用する必要がありますか?!
助けてくれてありがとう!
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");
}
}
}
}
List
とは異なり、ObservableCollection
はその内容が変更されたときに依存オブジェクトに通知するため、ObservableCollection<string>
ではなくList<string>
を使用する必要があります。
そして、あなたの場合、私は_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");
}
...
}
WPFのリストバインディングを機能させる最も簡単な方法は、INotifyCollectionChanged
を実装するコレクションを使用することです。ここで行う簡単なことは、リストを ObservableCollection
で置き換えるか、または変更することです。
ObservableCollection
を使用すると、リストを変更するたびに、CollectionChangedイベント(WPFバインディングに更新を通知するイベント)が発生します。実際のコレクションオブジェクトを交換する場合は、実際のコレクションプロパティのpropertychangedイベントを発生させる必要があることに注意してください。
リストがNotifyPropertyChangedイベントを自動的に発生させることはありません。
ItemsSource
プロパティを公開するWPFコントロールは、ObservableCollection<T>
にバインドされるように設計されています。これは、項目が追加または削除されると自動的に更新されますwill。
ObservableCollection を見てください。