在学习MVVM的过程中,我已经初步理解了WPF和ViewModel模式。在提供列表并且关注单个被选中的项时,我使用以下抽象。
public ObservableCollection<OrderViewModel> Orders { get; private set; }
public ICollectionView OrdersView
{
get
{
if( _ordersView == null )
_ordersView = CollectionViewSource.GetDefaultView( Orders );
return _ordersView;
}
}
private ICollectionView _ordersView;
public OrderViewModel CurrentOrder
{
get { return OrdersView.CurrentItem as OrderViewModel; }
set { OrdersView.MoveCurrentTo( value ); }
}
我可以将OrdersView与支持排序和过滤的内容绑定到WPF中的列表中:<ListView ItemsSource="{Binding Path=OrdersView}"
IsSynchronizedWithCurrentItem="True">
这对于单选视图非常有效。但我想在该视图中还支持多项选择,并将模型绑定到所选项目列表。
我应该如何将ListView.SelectedItems绑定到ViewModel上的后备属性?
ListView
绑定到视图模型是可以的,但它仍然没有解决从视图模型到ListView
的绑定需求。如果一个当前滚动出视图的视图模型其IsSelected
属性被设置为true,那么ListView
将对此毫不知情。如果您有任何依赖于ListView的SelectedItems属性的代码,这将忽略已经通过编程方式设置了IsSelected的视图模型。我没有一个简单的解决方法,但只是想指出只处理SelectionChanged的限制。 - Mal Ross