作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 ReactiveUI 9 中,ReactiveList
已弃用,取而代之的是 DynamicData (Blog post)。我目前正在尝试更新我的代码以使用 SourceList
.我能够让 ViewModel 工作,但似乎使用 SourceList
作为 WPF 中的绑定(bind)数据源并不容易。
我的第一次尝试是像之前版本的 ReactiveUI 一样创建绑定(bind):
this.OneWayBind(ViewModel, vm => vm.MyList, v => v.MyListView.ItemsSource);
SourceList
不可枚举(无法将 DynamicData.ISourceList 转换为 System.Collections.IEnumerable)
Items
列表的属性。
this.OneWayBind(ViewModel, vm => vm.MyList.Items, v => v.MyListView.ItemsSource);
Items
getter 在内部创建列表的副本,这意味着列表中的更改不会反射(reflect)在 View 中。
Bind
创建
ReadOnlyObservableCollection
的方法.
BindingList
代替)
this.WhenAnyValue(v => v.ViewModel.VisibleInputs)
.Select(l =>
{
var disposer = l.Connect().Bind(out var list).Subscribe();
return (List: list, Disposer: disposer);
})
.PairWithPreviousValue()
.Do(p => p.OldValue.Disposer?.Dispose()) // Cleanup the previous list binding
.Select(p => p.NewValue.List)
.BindTo(this, v => v.InputsList.ItemsSource);
最佳答案
我认为这个想法是 View 绑定(bind)到 IObservableCollection<T>
在调度程序线程上,SourceList<T>
用流产生的对象来馈送这个对象,例如:
public class MainViewModel : ReactiveObject
{
private SourceList<int> _myList { get; } = new SourceList<int>();
private readonly IObservableCollection<int> _targetCollection = new ObservableCollectionExtended<int>();
public MainViewModel()
{
Task.Run(()=>
{
for (int i = 0; i < 100; ++i)
{
_myList.Add(i);
System.Threading.Thread.Sleep(500);
}
});
_myList.Connect()
.ObserveOnDispatcher()
.Bind(_targetCollection)
.Subscribe();
}
public IObservableCollection<int> TargetCollection => _targetCollection;
}
this.OneWayBind(ViewModel, vm => vm.TargetCollection, v => v.MyListView.ItemsSource);
关于.net - 响应式(Reactive)UI 9 : binding lists to a WPF view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53708140/
我是一名优秀的程序员,十分优秀!