Чтобы подписаться на ваш последний комментарий (можно ли дать ссылку на конкретный комментарий?), Я напишу другой ответ, чтобы люди могли следить.
Я думаю, что вы вообще упускаете смысл событий. Что вы хотите, чтобы обработчик вашего события знал, когда он его получает? Как правило, это и есть цель аргументов события - вы передаете некоторую информацию обработчику, с помощью которого вы даете некоторое представление о том, что именно произошло.
Итак, когда вы впервые поднимаете событие, вы сделаете это так:
private void lstvMyView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SelectionChangedEventArgs args =
new SelectionChangedEventArgs(SelectedEvent, e.RemovedItems, e.AddedItems);
RaiseEvent(args);
}
Сначала вы должны создать аргументы, а затем использовать функцию RaiseEvent()
с этими аргументами, потому что вы хотите вызвать специальный маршрутизируемый тип wpf-события. Аргументы должны быть экземпляром класса, который наследует RoutedEventArgs. Обратите внимание, что вы создаете SelectionChangedEventArgs
, которые определены в wpf для «переноса» дополнительной информации в обработчик события, а именно, какие элементы были удалены из выбора и какие были добавлены, поэтому, когда обработчик получает событие, он может используйте эту информацию, если он хочет.
Об этом думаете, что вы делаете:
//Normal Event Raise
if (Selected != null)
Selected(this, e);
в основном - (как я сказал в моем первом ответе) удалите его, он вам не нужен.
Итак, что вас беспокоит, так это то, что вы второй раз поднимаете событие. Это прототип того, что вы должны сделать:
private void lstvMyView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
SelectionChangedEventArgs args =
new SelectionChangedEventArgs(SelectedEvent, ?, ?);
RaiseEvent(args);
}
Как вы видите, вам снова нужно создать SelectionChangedEventArgs
и использовать функцию RaiseEvent()
, чтобы вызвать событие. Но на этот раз вы не можете использовать e.RemovedItems
и e.AddedItems
, потому что вы обрабатываете событие MouseLeftButtonUp
, которое (через его аргументы) несет информацию о состоянии мыши, а не о том, какие элементы были добавлены в выделение (в конце концов, это событие мыши, а не событие выбора).
Вы должны решить, чем заменить два вопросительных знака - как я уже сказал в комментариях к первому ответу, вы должны решить, какую информацию вы хотите донести до пользователя вашего мероприятия. Что означает, что кнопка мыши больше не нажата на «lstvMyView»? Самое простое, что можно сделать, это:
SelectionChangedEventArgs args =
new SelectionChangedEventArgs(SelectedEvent, Enumerable.Empty<object>(), Enumerable.Empty<object>());
RaiseEvent(args);
, с помощью которого вы вызываете событие и сообщаете его потребителю, что из выбора не было удалено ни одного элемента и не было добавлено ни одного.