在学习 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 连同支持的排序和过滤一起绑定(bind)到 WPF 中的列表:
<ListView ItemsSource="{Binding Path=OrdersView}"
IsSynchronizedWithCurrentItem="True">
这对于单选 View 非常有效。但我还想在 View 中支持多项选择,并将模型绑定(bind)到所选项目的列表。
我如何将 ListView.SelectedItems 绑定(bind)到 ViewModel 的支持者属性?
最佳答案
将 IsSelected
属性添加到您的子 ViewModel(在您的情况下为 OrderViewModel
):
public bool IsSelected { get; set; }
将容器上的选定属性绑定(bind)到此(在本例中为 ListBox):
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
IsSelected
已更新以匹配容器上的相应字段。
您可以通过执行以下操作在 View 模型中获取选定的 child :
public IEnumerable<OrderViewModel> SelectedOrders
{
get { return Orders.Where(o => o.IsSelected); }
}
关于c# - 使用 MVVM 管理多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803216/