Przeglądaj źródła

PrsListView now uses SearchBarComponent

Kenric Nugteren 3 miesięcy temu
rodzic
commit
7a89ffe0a5

+ 6 - 10
PRS.Avalonia/PRS.Avalonia/Components/ListView/PrsListView.axaml

@@ -4,6 +4,7 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:listView="clr-namespace:PRS.Avalonia.Components.ListView"
              xmlns:converters="clr-namespace:InABox.Avalonia.Converters;assembly=InABox.Avalonia"
+             xmlns:components="clr-namespace:InABox.Avalonia.Components;assembly=InABox.Avalonia"
              xmlns:core="clr-namespace:InABox.Core;assembly=InABox.Core"
              xmlns:avalonia="clr-namespace:InABox.Avalonia;assembly=InABox.Avalonia"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
@@ -56,16 +57,11 @@
                 </MultiBinding>
             </ItemsControl.IsVisible>
         </ItemsControl>
-        
-        <TextBox
-            x:Name="Search"
-            Grid.Row="1"
-            Grid.Column="0"
-            Grid.ColumnSpan="2"
-            Watermark="Search.."
-            TextChanged="Search_OnTextChanged"
-            IsVisible="{Binding SearchVisible}">
-        </TextBox>
+
+		<components:SearchBar Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
+							  Command="{Binding SearchCommand}"
+							  Text="{Binding SearchText}"
+							  IsVisible="{Binding SearchVisible}"/>
         
         <ListBox x:DataType="listView:PrsListView"
             Grid.Row="2"

+ 13 - 10
PRS.Avalonia/PRS.Avalonia/Components/ListView/PrsListView.axaml.cs

@@ -6,7 +6,9 @@ using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls.Templates;
 using Avalonia.Media;
+using CommunityToolkit.Mvvm.ComponentModel;
 using CommunityToolkit.Mvvm.Input;
+using InABox.Core;
 using InABox.Avalonia;
 using InABox.Avalonia.Converters;
 
@@ -31,6 +33,8 @@ public partial class PrsListView : UserControl
             SetValue(SearchVisibleProperty, value); 
         }
     }
+
+    public string SearchText { get; set; }
     
     public static readonly StyledProperty<bool> FiltersVisibleProperty =
         AvaloniaProperty.Register<PrsListView, bool>(nameof(FiltersVisible), true);
@@ -93,16 +97,6 @@ public partial class PrsListView : UserControl
         }
     });
     
-    
-    public static readonly StyledProperty<ICommand?> SearchCommandProperty =
-        AvaloniaProperty.Register<PrsListView, ICommand?>(nameof(SearchCommand));
-    
-    public ICommand? SearchCommand
-    {
-        get => GetValue(SearchCommandProperty);
-        set => SetValue(SearchCommandProperty, value);
-    }
-    
     private void Search_OnTextChanged(object? sender, TextChangedEventArgs e)
     {
         if (sender is TextBox search && Repository != null)
@@ -110,4 +104,13 @@ public partial class PrsListView : UserControl
                 ? shell.Match(search.Text) 
                 : false);
     }
+
+    [RelayCommand]
+    private void Search()
+    {
+        if (!SearchText.IsNullOrWhiteSpace() && Repository != null)
+            Repository.Search(o => o is IShell shell 
+                ? shell.Match(SearchText) 
+                : false);
+    }
 }