#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
примере.