diff --git a/MapControl/Avalonia/MapItemsControl.Avalonia.cs b/MapControl/Avalonia/MapItemsControl.Avalonia.cs index 54f960df..c8f8a6c3 100644 --- a/MapControl/Avalonia/MapItemsControl.Avalonia.cs +++ b/MapControl/Avalonia/MapItemsControl.Avalonia.cs @@ -20,6 +20,11 @@ namespace MapControl SelectItemsByPosition(geometry.FillContains); } + public new MapItem ContainerFromItem(object item) + { + return (MapItem)base.ContainerFromItem(item); + } + protected override bool NeedsContainerOverride(object item, int index, out object recycleKey) { recycleKey = null; @@ -35,26 +40,13 @@ namespace MapControl protected override void PrepareContainerForItemOverride(Control container, object item, int index) { base.PrepareContainerForItemOverride(container, item, index); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.SetBinding(MapItem.LocationProperty, - new Binding - { - Path = new PropertyPath(LocationMemberPath), - Source = item - }); - } + PrepareContainer(container, item); } protected override void ClearContainerForItemOverride(Control container) { base.ClearContainerForItemOverride(container); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.ClearValue(MapItem.LocationProperty); - } + ClearContainer(container); } internal void UpdateSelection(MapItem mapItem, PointerEventArgs e) diff --git a/MapControl/Shared/MapItemsControl.cs b/MapControl/Shared/MapItemsControl.cs index df3d0f82..d66b6cbf 100644 --- a/MapControl/Shared/MapItemsControl.cs +++ b/MapControl/Shared/MapItemsControl.cs @@ -2,12 +2,15 @@ #if WPF using System.Windows; using System.Windows.Controls; +using System.Windows.Data; #elif UWP using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Data; #elif WINUI using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Data; #endif namespace MapControl @@ -114,5 +117,26 @@ namespace MapControl SelectItemsInRect(new Rect(xMin, yMin, xMax - xMin, yMax - yMin)); } } + + private void PrepareContainer(DependencyObject container, object item) + { + if (LocationMemberPath != null && container is MapItem mapItem) + { + mapItem.SetBinding(MapItem.LocationProperty, + new Binding + { + Path = new PropertyPath(LocationMemberPath), + Source = item + }); + } + } + + private void ClearContainer(DependencyObject container) + { + if (LocationMemberPath != null && container is MapItem mapItem) + { + mapItem.ClearValue(MapItem.LocationProperty); + } + } } } diff --git a/MapControl/WPF/MapItemsControl.WPF.cs b/MapControl/WPF/MapItemsControl.WPF.cs index bff16b4b..5c7a3118 100644 --- a/MapControl/WPF/MapItemsControl.WPF.cs +++ b/MapControl/WPF/MapItemsControl.WPF.cs @@ -1,6 +1,5 @@ using System.Windows; using System.Windows.Controls; -using System.Windows.Data; using System.Windows.Media; namespace MapControl @@ -40,26 +39,13 @@ namespace MapControl protected override void PrepareContainerForItemOverride(DependencyObject container, object item) { base.PrepareContainerForItemOverride(container, item); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.SetBinding(MapItem.LocationProperty, - new Binding - { - Path = new PropertyPath(LocationMemberPath), - Source = item - }); - } + PrepareContainer(container, item); } protected override void ClearContainerForItemOverride(DependencyObject container, object item) { base.ClearContainerForItemOverride(container, item); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.ClearValue(MapItem.LocationProperty); - } + ClearContainer(container); } } } diff --git a/MapControl/WinUI/MapItemsControl.WinUI.cs b/MapControl/WinUI/MapItemsControl.WinUI.cs index 477ebb35..d6453ef2 100644 --- a/MapControl/WinUI/MapItemsControl.WinUI.cs +++ b/MapControl/WinUI/MapItemsControl.WinUI.cs @@ -1,9 +1,7 @@ #if UWP using Windows.UI.Xaml; -using Windows.UI.Xaml.Data; #else using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Data; #endif namespace MapControl @@ -34,26 +32,13 @@ namespace MapControl protected override void PrepareContainerForItemOverride(DependencyObject container, object item) { base.PrepareContainerForItemOverride(container, item); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.SetBinding(MapItem.LocationProperty, - new Binding - { - Path = new PropertyPath(LocationMemberPath), - Source = item - }); - } + PrepareContainer(container, item); } protected override void ClearContainerForItemOverride(DependencyObject container, object item) { base.ClearContainerForItemOverride(container, item); - - if (LocationMemberPath != null && container is MapItem mapItem) - { - mapItem.ClearValue(MapItem.LocationProperty); - } + ClearContainer(container); } } }