ListView + MultipleSelect + MVVM =?

时间:2010-03-24 00:18:47

标签: c# wpf gridview listview mvvm

如果我说“哎呀!”,我可以给我的ListView和SelectionMode =“Multiple”这个名字,并且能够非常容易地获得所有选定的项目。但我试图尽可能地坚持MVVM,我想以某种方式数据绑定到一个ObservableCollection,它保存每个选定项的Name列的值。你是怎么做到这一点的?单选很简单,但对于我目前的WPF / MVVM知识,多选解决方案并不明显。

read this question on SO,虽然它确实给了我一些很好的见解,但我不知道如何将一个必要的绑定添加到一行,因为我使用一个带有GridView的ListView作为其View,而不是列表框。

这是我的XAML基本上的样子:

<ListView DockPanel.Dock="Top" ItemsSource="{Binding ClientPreview}" SelectionMode="Multiple">
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Header="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Address">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Address}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

听起来正确的做法是将每一行的IsSelected属性数据绑定到存储在我正在数据绑定的ObservableCollection中的每个对象。我还没弄明白怎么做。

1 个答案:

答案 0 :(得分:11)

在ListView上编写ItemContainerstyle并放置一个Setter来绑定你的ViewModel'IsSelected'属性

<Style TargetType="{x:Type ListViewItem}">
   <Setter Property="IsSelected" Value="{Binding IsSelected,Mode=OneWayToSource}"/>