Как получить выбранный элемент listviewitem из пользовательского WPF listview для маршрутизируемого события при использовании Elmish.WPF?

#listview #routed-events #elmish-wpf

#listview #routed-events #elmish-wpf

Вопрос:

Я новичок в Elmish.

Привязка WPF использует пользовательский элемент управления как:

 local:AppointmentListView.ScheduledAppointment ="AppointmentDataGrid_ScheduledAppointment" 
  

У меня есть пользовательский ListView на C #, который вызывает следующее маршрутизируемое событие при выборе элемента listview:

 private void AppointmentListView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            var item = (sender as ListView).SelectedItem;
            if ((IVisit)item != null)
            {
                ScheduledAppointmentEventArgs args = new ScheduledAppointmentEventArgs(ScheduledAppointmentEvent, (IVisit)item);
                RaiseEvent(args);
            }   
        }
  

Мне не нужно C # приведение «iVisit», но МНЕ НУЖНО, чтобы выбранный элемент listview имел тип Visit из модели F #. То есть мне нужен фактический ключ назначения объекта. Но то, что я получаю, это:
«Elmish.WPF.ViewModel<объект, объект>»

ItemsSource для ListView определяется как «AppointmentKeys» на Elmish.WPF как:

 type Model =
    { AppointmentKeys: Visit.Model list
      Id: int
    }

let bindings() =[
    "AppointmentKeys"  |> Binding.subModelSeq(
                            (fun (_, m) -> m.AppointmentKeys),
                            (fun v -> v.Id),
                             Visit.bindings                            
                          )
  

Итак, вопрос в следующем: как мне вернуть запись F #, выбранную пользователем из ListView?

Более конкретно, как записывается код F # для возврата выбранного элемента представления списка, когда «SelectedItem» поступает из кодовой привязки к MouseButtonEvents?

Ответ №1:

Не подписывайтесь на события с функцией, определенной в вашем коде. Вместо этого преобразуйте событие в команду, подобную этой, из EventBindingsAndBehaviors примера. Затем привязка к выбранному элементу из a ListView , как показано в SubModelSelectedItem примере.