Dale Ragan записал:
Вы не можете использовать средства управления AjaxToolKit в ASP.NET MVC
, Как Ajax обрабатывается на Переполнении стека? JQuery делает это? В его сообщении Ужаса Кодирования Секреты Ниндзя JavaScript Jeff записал об использовании JQuery при записи Переполнения стека.
, Конечно, они не кодировали его вручную. Я сделал это однажды со всем XMLHttpRequest JavaScript, когда термин "Ajax" был популяризирован приблизительно в 2005. Это был кошмар.
Я тоже искал ответ на этот вопрос. Я нашел ответы либо на
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
Билл
Мне удалось обойти это с помощью команд реле, как упоминал Билл. Он немного грязный по частям, но я избегал помещать какой-либо код в задний файл.
Во-первых, в вашем 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 и сделайте небольшое преобразование - ваш единственный вариант, не говоря уже о «грязи».