Skip to content

Commit

Permalink
Add ScalarAttributeComparers.physicalEqualityCompare
Browse files Browse the repository at this point in the history
  • Loading branch information
edgarfgp authored and h0lg committed May 20, 2024
1 parent e509ef7 commit 1456c06
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 15 deletions.
8 changes: 8 additions & 0 deletions src/Fabulous.Avalonia/Attributes.fs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ module ValueEventData =
{ Value = value
Event = event >> box >> MsgValue }

[<RequireQualifiedAccess>]
module ScalarAttributeComparers =
let inline physicalEqualityCompare a b =
if LanguagePrimitives.PhysicalEquality a b then
ScalarAttributeComparison.Identical
else
ScalarAttributeComparison.Different

module Attributes =
/// Define an attribute for EventHandler<'T>
let inline defineAvaloniaObservableEvent<'args>
Expand Down
23 changes: 8 additions & 15 deletions src/Fabulous.Avalonia/Views/Controls/AutoCompleteBox.fs
Original file line number Diff line number Diff line change
Expand Up @@ -82,21 +82,14 @@ module AutoCompleteBox =

/// Allows setting the ItemTemplate on an AutoCompleteBox
let ItemTemplate =
Attributes.defineSimpleScalar<obj -> Widget>
"AutoCompleteBox_ItemTemplate"
(fun a b ->
if LanguagePrimitives.PhysicalEquality a b then
ScalarAttributeComparison.Identical
else
ScalarAttributeComparison.Different)
(fun _ newValueOpt node ->
let autoComplete = node.Target :?> AutoCompleteBox

match newValueOpt with
| ValueNone -> autoComplete.ClearValue(AutoCompleteBox.ItemTemplateProperty)
| ValueSome template ->
autoComplete.SetValue(AutoCompleteBox.ItemTemplateProperty, WidgetDataTemplate(node, template))
|> ignore)
Attributes.defineSimpleScalar<obj -> Widget> "AutoCompleteBox_ItemTemplate" ScalarAttributeComparers.physicalEqualityCompare (fun _ newValueOpt node ->
let autoComplete = node.Target :?> AutoCompleteBox

match newValueOpt with
| ValueNone -> autoComplete.ClearValue(AutoCompleteBox.ItemTemplateProperty)
| ValueSome template ->
autoComplete.SetValue(AutoCompleteBox.ItemTemplateProperty, WidgetDataTemplate(node, template))
|> ignore)

[<AutoOpen>]
module AutoCompleteBoxBuilders =
Expand Down

0 comments on commit 1456c06

Please sign in to comment.