我使用mvvm-light,我注意到了關於RaisePropertyChanged的這種奇怪行爲。RaisePropertyChanged不適用於收藏
XAML:
<ListBox ItemsSource="{Binding Collection}"/>
<TextBlock Text="{Binding Text}"/>
可觀察類:
public class A : ObservableObject
{
private string _b;
public string B
{
get { return this._b; }
set
{
this._b = value;
this.RaisePropertyChanged("B");
}
}
}
VM:
public MainViewModel(IDataService dataService) { this.Collection = new List<A>(...); }
public RelayCommand Command1
{
get
{
return this._command1 ?? (this._command1= new RelayCommand(() =>
{
this.Collection.Add(new A());
this.Collection[2].B = "updated";
this.RaisePropertyChanged("Collection");
this.RaisePropertyChanged("Text");
}));
}
}
public RelayCommand Command2
{
get { return this._command2?? (this._command2 = new RelayCommand(() => { this.Text++; })); }
}
public List<A> Collection { get; set; }
public int Text { get; set; }
所以,RaisePropertyChanged( 「文集」),不更新的結合而RaisePropertyChanged(」文字「)。我可以通過多次執行Command2和Command1來看到它。如果集合是一個ObservableCollection,則新元素在視圖中顯示,但更新的項目不是,這意味着ObservableCollection的內部機制起作用,但不是RaisePropertyChanged。
你是否爲你的A類實現了'INPC'? –
@ RV1987,ObservableObject實現。 – aush
只要您設置的屬性正在提升'PropertyChanged'事件,UI就會更新。 –