ListView + MultipleSelect + MVVM =?
Если бы я сказал: "Черт с ним!", Я мог бы просто дать свой ListView с SelectionMode= "Multiple" имя, и быть в состоянии получить все выбранные элементы очень легко. Но я пытаюсь придерживаться MVVM как можно больше, и я хочу каким-то образом привязать databind к ObservableCollection, который содержит значение из столбца Name для каждого выбранного элемента. Как ты это делаешь? Одиночный выбор прост, но решение multi selection не очевидно для меня с моим текущим WPF / MVVM знание.
Я прочитайте этот вопрос на SO, и хотя это дает мне хорошее представление, я не знаю, как добавить необходимую привязку к строке, потому что я использую ListView с GridView в качестве его представления, а не ListBox.
вот как выглядит мой 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 ответов
напишите ItemContainerstyle в ListView и поместите сеттер для привязки к свойству ViewModel 'IsSelected'
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected,Mode=OneWayToSource}"/>