众所周知,WPF除了DataGrid,其他列表控件原生都对多选功能有各种各样的限制,比如SelectedItems只读,如果你使用了MVVM模式的话不便于从ViewModel中获取选中的列表项,我摸索了很久,终于发现了一个相对较为完美的方式来实现列表多选

1.首先需要在Model中添加一个带有通知的属性,命名可以随意,比如

public bool IsSelected { get; set; }
//注意此处我没用自定义属性是因为我用了Fody这个很好用的东西,
//可以在编译时将这个属性自动加上通知方法

2.我在应用到ListBox中的ItemContainerStyle里面,添加一个如下:

<Setter 
Property="IsSelected" 
Value="{Binding RelativeSource={RelativeSource Self},Path=DataContext.IsSelected}" />

另外多说一下,这里我是用在Style里面,暂不清楚能否用于DataTemplate里面,理论上应该是能用在DataTemplate里面的,各位可以试试,我后面会做测试,后续会更新当前文章

至此,关于WPF中普通列表的多选操作就完成了。