F # FsXaml: Какие события поддерживаются для каких элементов управления? - PullRequest
1 голос
/ 02 июля 2019

<Button Click="MyClickMethod" /> отлично работает;провайдер типа XAML представляет MyClickMethod как виртуальный метод в выделенном фрагменте кода.

С другой стороны, override this.MyDoubleClickMethod (_, _) получает довольно красное подчеркивание для <ListBox MouseDoubleClick="MyDoubleClickMethod" />, и, конечно, моя программа не может скомпилироваться.

Если события ListBox не поддерживаются, то было бы неплохо знать это, прежде чем я потратил три дня на кодирование своего приложения.Хорошо ли задокументирован FsXaml (и я не имею в виду исходный код)?Какой общепринятый способ решения моей проблемы?

РЕДАКТИРОВАТЬ: Вот мои файлы кода (минус AssemblyInfo.fs и App.* шаблон) в порядке обозревателя решений:

MainViewModel.fs:

namespace MyWpf.ViewModels

open ViewModule
open ViewModule.FSharp

type MainViewModel () as self = 
    inherit ViewModelBase ()

    let myItems = self.Factory.Backing (<@ self.MyItems @>, Array.empty)

    do
        self.MyItems <- [| "cheeseburger"; "French fries"; "chocolate shake" |]

    member this.MyItems
        with get () = lock myItems (fun () -> myItems.Value)
        and private set value = lock myItems (fun () -> myItems.Value <- value)

MainView.xaml.fs:

namespace MyWpf.Views

open System.Windows

type MainViewBase = FsXaml.XAML<"MainView.xaml">
type MainView () =
    inherit MainViewBase ()

    override this.MyDoubleClickMethod (_, _) = MessageBox.Show "click!" |> ignore

MainView.xaml:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:viewModels="clr-namespace:MyWpf.ViewModels;assembly=MyWpf">

    <UserControl.DataContext>
        <viewModels:MainViewModel />
    </UserControl.DataContext>

    <Grid>
        <ListBox
            Name="MyList"
            Width="300"
            Height="224"
            Margin="10,4,10,4"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            ItemsSource="{Binding MyItems}"
            MouseDoubleClick="MyDoubleClickMethod" />
    </Grid>
</UserControl>

MainWindow.xaml.fs:

namespace MyWpf.Windows

type MainWindow = FsXaml.XAML<"MainWindow.xaml">

MainWindow.xaml:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:views="clr-namespace:MyWpf.Views;assembly=MyWpf"
    Width="320"
    Height="240"
    ResizeMode="CanMinimize"
    WindowStartupLocation="CenterScreen">
    <Grid>
        <views:MainView />
    </Grid>
</Window>
...