Привязать к SelectedItems из DataGrid или ListBox в MVVM - PullRequest
15 голосов
/ 27 марта 2012

СМОТРИТЕ МОЙ ОТВЕТ НА ДНЕ

Просто делаю легкое чтение в WPF, где мне нужно связать выбранные элементы из DataGrid, но я не могу придумать что-то осязаемое. Мне просто нужны выбранные объекты.

DataGrid:

<DataGrid Grid.Row="5" 
    Grid.Column="0" 
    Grid.ColumnSpan="4" 
    Name="ui_dtgAgreementDocuments"
    ItemsSource="{Binding Path=Documents, Mode=TwoWay}"
    SelectedItem="{Binding Path=DocumentSelection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch" 
    Background="White"
    SelectionMode="Extended" Margin="2,5" 
    IsReadOnly="True" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False" 
    CanUserResizeRows="False"
    GridLinesVisibility="None" 
    HorizontalScrollBarVisibility="Hidden"
    columnHeaderStyle="{StaticResource GreenTea}" 
    HeadersVisibility="Column" 
    BorderThickness="2" 
    BorderBrush="LightGray" 
    CellStyle="{StaticResource NonSelectableDataGridCellStyle}"
    SelectionUnit="FullRow" 
    HorizontalContentAlignment="Stretch" AutoGenerateColumns="False">

Ответы [ 12 ]

0 голосов
/ 03 декабря 2018

Как насчет использования конвертера?

public class SelectedItemsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dg = value as DataGrid;
        return dg?.SelectedItems;
    }
...

Используйте это в DataGrid ContextMenu как это:

       <DataGrid.ContextMenu>
            <ContextMenu>
                <MenuItem
                    CommandParameter="{Binding Path=MySelectedItems, Converter={StaticResource selectedItemsConverter}, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"
                    Command="{Binding MyDoSomethingWithMySelectedItemsCommand}"
                    Header="Do Something...">
                </MenuItem>
0 голосов
/ 31 июля 2015

Решение, упомянутое devuxer

<DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <Setter Property="IsSelected"
                    Value="{Binding IsSelected}" />
        </Style>
    </DataGrid.Resources>

не работает при наличии большого набора данных. Вам нужно будет отключить виртуализацию строк, и это именно тот случай, когда вам это нужно ...

EnableRowVirtualization = "False"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...