Инструментарий WPF Мультивыбор DataGrid: Как вывести SelectedItems?

Dale Ragan записал:

Вы не можете использовать средства управления AjaxToolKit в ASP.NET MVC

, Как Ajax обрабатывается на Переполнении стека? JQuery делает это? В его сообщении Ужаса Кодирования Секреты Ниндзя JavaScript Jeff записал об использовании JQuery при записи Переполнения стека.

, Конечно, они не кодировали его вручную. Я сделал это однажды со всем XMLHttpRequest JavaScript, когда термин "Ajax" был популяризирован приблизительно в 2005. Это был кошмар.

9
задан Mikhail 8 February 2012 в 08:13
поделиться

2 ответа

Я тоже искал ответ на этот вопрос. Я нашел ответы либо на

1) в выделенном коде делегировать работу методу в ViewModel, передавая список SelectedItems из таблицы данных. Эта коллекция будет содержать все выбранные элементы.

Или

2) используйте подсветку инструментария MVVM, которая позволяет использовать событие для команды и передавать объект в качестве параметра непосредственно в ViewModel.

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    IList lst = this.myDataGrid.SelectedItems;
    ViewModel.RowsSelected(lst);
}

В этом случае вам нужно будет привязать ваш SelectionChanged в вашем xaml к вашему selectionchanged в коде позади. Затем в коде программной части вы можете сохранить этот список и использовать его для удаления выбранных строк и т. Д.

Если есть лучший способ сделать это, я хотел бы знать, это хорошо.

HTH

Билл

4
ответ дан 4 December 2019 в 13:03
поделиться

Мне удалось обойти это с помощью команд реле, как упоминал Билл. Он немного грязный по частям, но я избегал помещать какой-либо код в задний файл.

Во-первых, в вашем XAML - привяжите свою команду к кнопке или тому, что запускает вашу RelayCommand.

<Button Content="Select" 
        cmd:ButtonBaseExtensions.Command="{Binding CommandSelect}"   
        cmd:ButtonBaseExtensions.CommandParameter="{Binding ElementName=Results, Path=SelectedItems}" />

Вы заметите команду Параметр Связывается с другим элементом пользовательского интерфейса - DataGrid или ListView, из которых вы хотите получить выбранные элементы. Этот синтаксис будет работать в Silverlight 3, а также в WPF, поскольку теперь он поддерживает привязку элемента к элементу.

В вашей модели представления ваша команда будет выглядеть примерно так.

Private _CommandSelect As RelayCommand(Of IEnumerable)

Public ReadOnly Property CommandSelect() As RelayCommand(Of IEnumerable)
    Get
        If _CommandSelect Is Nothing Then
            _CommandSelect = New RelayCommand(Of IEnumerable)(AddressOf CommandSelectExecuted, AddressOf CommandSelectCanExecute)
        End If
        Return _CommandSelect
    End Get
End Property


Private Function CommandSelectExecuted(ByVal parameter As IEnumerable) As Boolean

    For Each Item As IElectoralAreaNode In parameter

    Next

    Return True
End Function

Private Function CommandSelectCanExecute() As Boolean
    Return True
End Function

Выбранные элементы будут возвращены как SelectedItemCollection, но вы вероятно, не хотите, чтобы эта зависимость в вашей модели представления. Так что наберите его как IEnumerable и сделайте небольшое преобразование - ваш единственный вариант, не говоря уже о «грязи».

2
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: