Explorar o código

avalonia: updated filters for ButtonStrip

Kenric Nugteren hai 2 meses
pai
achega
918f00aeb4

+ 2 - 1
PRS.Avalonia/PRS.Avalonia/Components/SelectionView/SelectionView.axaml

@@ -13,7 +13,8 @@
 			<RowDefinition Height="*"/>
 			<RowDefinition Height="Auto"/>
 		</Grid.RowDefinitions>
-		<components:ButtonStrip Name="Filters" Grid.Row="0" Items="{Binding FilterButtons}" SelectionChanged="Filters_OnSelectionChanged"/>
+		<components:ButtonStrip Name="Filters" Grid.Row="0" ItemsSource="{Binding FilterButtons}" SelectionChanged="Filters_OnSelectionChanged"
+								SelectedItem="{Binding SelectedFilter}"/>
 		<components:AvaloniaDataGrid Name="Grid" Grid.Row="1"
 									 ItemsSource="{Binding ItemsSource}"
 									 RefreshRequested="Grid_OnRefreshRequested"

+ 3 - 3
PRS.Avalonia/PRS.Avalonia/Components/SelectionView/SelectionView.axaml.cs

@@ -36,7 +36,7 @@ public partial class SelectionView : UserControl
         Columns_Changed(Model.Columns);
         Model.WhenPropertyChanged(x => x.SelectionPageMode).Subscribe(value =>
         {
-            Grid.SelectionMode = value.Value == SelectionPageMode.MultiSelect ? SelectionMode.Multiple : SelectionMode.Single;
+            Grid.SelectionMode = value.Value == SelectionPageMode.MultiSelect ? AvaloniaDataGridSelectionMode.Multiple : AvaloniaDataGridSelectionMode.Single;
         });
         Model.FilterButtons.CollectionChanged += FilterButtons_CollectionChanged;
     }
@@ -53,13 +53,13 @@ public partial class SelectionView : UserControl
 
     private void Filters_OnSelectionChanged(object sender, EventArgs e)
     {
-        var args = new SelectionViewRefreshArgs(true, Filters.SelectedItem?.Text);
+        var args = new SelectionViewRefreshArgs(true, Filters.SelectedItem as string);
         Model.RefreshCommand.Execute(args);
     }
 
     private void Grid_OnRefreshRequested(object sender, AvaloniaDataGridRefreshRequestedEventArgs e)
     {
-        var args = new SelectionViewRefreshArgs(true, Filters.SelectedItem?.Text);
+        var args = new SelectionViewRefreshArgs(true, Filters.SelectedItem as string);
         Model.RefreshCommand.Execute(args);
     }
     private void Grid_OnSelectionChanged(object sender, AvaloniaDataGridSelectionChangedEventArgs e)

+ 7 - 6
PRS.Avalonia/PRS.Avalonia/Components/SelectionView/SelectionViewModel.cs

@@ -42,7 +42,7 @@ public partial class SelectionViewModel : PopupViewModel<object?[]>, IModuleView
     [ObservableProperty]
     private SelectionPageMode _selectionPageMode = SelectionPageMode.Immediate;
 
-    public ObservableCollection<ButtonStripItem> FilterButtons { get; } = new();
+    public ObservableCollection<string> FilterButtons { get; } = new();
 
     public ObservableCollection<SelectionViewButton> Buttons { get; } = new();
 
@@ -67,6 +67,9 @@ public partial class SelectionViewModel : PopupViewModel<object?[]>, IModuleView
     [ObservableProperty]
     private Action<object?[]>? _selected;
 
+    [ObservableProperty]
+    private object? _selectedFilter;
+
     private object?[] _selectedItems = [];
 
     public SelectionViewModel()
@@ -78,10 +81,7 @@ public partial class SelectionViewModel : PopupViewModel<object?[]>, IModuleView
     {
         foreach(var filter in filters)
         {
-            FilterButtons.Add(new()
-            {
-                Text = filter
-            });
+            FilterButtons.Add(filter);
         }
     }
     public void AddFilters(IEnumerable<string> filters) => DoAddFilters(filters);
@@ -98,7 +98,7 @@ public partial class SelectionViewModel : PopupViewModel<object?[]>, IModuleView
     {
         return Task.Run(() =>
         {
-            var result = Refresh?.Invoke(new(false, FilterButtons.FirstOrDefault(x => x.Selected)?.Text ?? ""));
+            var result = Refresh?.Invoke(new(false, SelectedFilter as string));
             if (result is not null)
             {
                 if (result is ICoreRepository repository)
@@ -120,6 +120,7 @@ public partial class SelectionViewModel : PopupViewModel<object?[]>, IModuleView
         {
             LastUpdated = repository.LastUpdated;
         }
+        ItemsSource = null;
         ItemsSource = result;
     }