我有一个 SourceList 和一个 ReadOnlyObservableCollection。
public SourceList<T> SourceList { get; set; } = new SourceList<T>();
public ReadOnlyObservableCollection<T> ActiveList;
并使用以下代码进行绑定:
SourceList.Connect()
.Filter(criteria, ListFilterPolicy.ClearAndReplace)
.Transform((item, i) => { item.DisplayOrder = i + 1; return item; })
.Bind(out ActiveList)
.Subscribe();
列表显示在窗口中:
listItemsControl.ItemsSource = ViewModel.ActiveList;
我将任何项目的 IsSelected 绑定到 ToggleButton 的 IsChecked。 一切都很好,直到我将新项目添加到 SourceList 中。 对于新添加的项目,绑定不起作用。
感谢您提供解决问题的任何想法。
您在检查
criteria
时过滤 SourceList 的是 IsSelected
吗?如果是这样,您可能需要添加一个 AutoRefresh
SourceList.Connect()
.AutoRefresh(x=> x.IsSelected)
.Filter(criteria, ListFilterPolicy.ClearAndReplace)
.Transform((item, i) => { item.DisplayOrder = i + 1; return item; })
.Bind(out ActiveList)
.Subscribe();
默认情况下,SourceList 只会将集合更改推送到管道中,并且不会考虑任何给定项目中的属性更改。通过添加
AutoRefresh
,对源中该属性的更改将导致其父级被发送到管道中。