使用 Elmish.WPF 时,如何从路由事件的自定义 WPF 列表视图中获取选定的列表视图项?

How to get a selected listviewitem from a custom WPF listview for routed event when using Elmish.WPF?

我是 Elmish 的新手。

WPF 绑定将自定义控件用作:

local:AppointmentListView.ScheduledAppointment ="AppointmentDataGrid_ScheduledAppointment" 

我有一个 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);
            }   
        }

我不需要“IVisit”的 C# 转换,但我确实需要选择的列表视图项是来自 F# 模型的 Visit 类型。也就是说,我需要实际的对象约会键。但我得到的是: "Elmish.WPF.ViewModel<对象,对象>"

ListView 的 itemsSource 在 Elmish.WPF 中定义为“AppointmentKeys”:

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

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

所以,问题是:在后面的代码中,如何return用户从ListView中选择的F#记录?

更具体地说,当“SelectedItem”来自 MouseButtonEvents 上的代码隐藏绑定时,F# 代码如何写入 return 选定的列表视图项?

不要使用 code-behind 中定义的函数订阅事件。相反,将事件转换为命令 like this from the EventBindingsAndBehaviors sample. Then binding to a selected item from a ListView as in done in the SubModelSelectedItem sample.