根据另一个 ItemsControl 的选定对象更新 ItemsControl.ItemsSource
Update ItemsControl.ItemsSource based on selected object of a another ItemsControl
我们使用 ReactiveUI 和 DynamicData 并有两个列表框:ListBoxA 和 ListBoxB。根据 ListBoxA 的选择,ListBoxB 中的列表应该更新(未过滤)。看起来很简单,但我在刷新 ListBoxB
时遇到了一些问题
列表框在视图中的绑定方式如下:
this.OneWayBind(ViewModel, vm => vm.ItemsA, v => v.ListBoxA.ItemsSource).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedItemA, v => v.ListBoxA.SelectedItem).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.ItemsB, v => v.ListBoxB.ItemsSource).DisposeWith(disposables);
ViewModel:=
_storage.PoolA.Connect()
.Transform(m => new ViewModelForA(m))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsA)
.Subscribe();
SelectedItemA.PoolB.Connect()
.Transform(c => new ViewModelForB(c))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsB)
.Subscribe();
如有任何帮助,我们将不胜感激!
每次您 select ListBoxA
中的某些内容发生变化时,您的 SelectedItemA
对象就会发生变化,您需要重新创建与它的连接。
首先我们从 SelectedItemA 创建一个 IObservable,然后使用 DynamicData 的 Switch 运算符
class MyViewModel: INotifyPropertyChange
{
public MyViewModel()
{
_storage.PoolA.Connect()
...
this.WhenPropertyChanged(x => x.SelectedItemA)
.Select(x => x.Value.PoolB)
.Switch() // Switch from DynamicData
.Transform(c => new ViewModelForB(c))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsB)
.Subscribe();
}
}
我们使用 ReactiveUI 和 DynamicData 并有两个列表框:ListBoxA 和 ListBoxB。根据 ListBoxA 的选择,ListBoxB 中的列表应该更新(未过滤)。看起来很简单,但我在刷新 ListBoxB
时遇到了一些问题列表框在视图中的绑定方式如下:
this.OneWayBind(ViewModel, vm => vm.ItemsA, v => v.ListBoxA.ItemsSource).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedItemA, v => v.ListBoxA.SelectedItem).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.ItemsB, v => v.ListBoxB.ItemsSource).DisposeWith(disposables);
ViewModel:=
_storage.PoolA.Connect()
.Transform(m => new ViewModelForA(m))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsA)
.Subscribe();
SelectedItemA.PoolB.Connect()
.Transform(c => new ViewModelForB(c))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsB)
.Subscribe();
如有任何帮助,我们将不胜感激!
每次您 select ListBoxA
中的某些内容发生变化时,您的 SelectedItemA
对象就会发生变化,您需要重新创建与它的连接。
首先我们从 SelectedItemA 创建一个 IObservable,然后使用 DynamicData 的 Switch 运算符
class MyViewModel: INotifyPropertyChange
{
public MyViewModel()
{
_storage.PoolA.Connect()
...
this.WhenPropertyChanged(x => x.SelectedItemA)
.Select(x => x.Value.PoolB)
.Switch() // Switch from DynamicData
.Transform(c => new ViewModelForB(c))
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _itemsB)
.Subscribe();
}
}