fsprojects / Avalonia.FuncUI

Develop cross-plattform GUI Applications using F# and Avalonia!
https://funcui.avaloniaui.net/
MIT License
889 stars 72 forks source link

`DataTemplateView` may not work in some cases #396

Open hxYuki opened 5 months ago

hxYuki commented 5 months ago

For example, MenuItemTemplate from FluentAvalonia.NavigationView. The viewFunc can be triggered, but the view is not applied. You have to use builtin FuncDataTemplate instead.

It seems that it's because of NavigationView requiring NavigationViewItem as top element in template. And it doesn't fit the restriction.

Is there a different behavior from FuncDataTemplate or something I did wrong?

// this works
FuncDataTemplate<string>(fun value scope ->
    let nvi = NavigationViewItem()
    nvi.Content <- value + "!!!"

    nvi)

// this doesn't work
DataTemplateView<_, _>.create (fun item ->
    create<NavigationViewItem> [] (fun nv -> nv.Content <- (item + "!!!"))) // my wrapper calling `init` and ViewBuilder for third party controls
JaggerJo commented 5 months ago

DataTemplateView<_, _> can you fill in the types here ind make sure the template matches the data type?

hxYuki commented 5 months ago

Yhea, it is DataTemplateView<string, IView<NavigationViewItem>>. This doesn't work either. And with a break point set I can see the template is called twice with item being "a". Which just like returning an element other than NavigationViewItem in FuncDataTemplate, the template is discarded samely. (With source [ "a"; "b"; "c" ])