Эх сурвалжийг харах

Добавлено автодополнение

user 6 сар өмнө
parent
commit
3af980d30d

+ 36 - 18
src/SASDesktop/ViewModels/Transport/Create.cs

@@ -25,14 +25,10 @@ namespace SASDesktop.ViewModels.Transport
             get { return _selectedBrand; }
             set {
                 _selectedBrand = value;
-
                 // В поле ввода производителя должно подставиться имя
                 // производителя, но фильтрации происходить не должно
-                _brandSearch = _selectedBrand.Name;
+                _brandSearch = _selectedBrand != null ?  _selectedBrand.Name : "";
                 RaisePropertyChanged(nameof(BrandSearch));
-
-                // Скрываем подсказки
-                BrandSuggestionsVisible = false;
             }
         }
         // Предлагаемые производители
@@ -50,23 +46,25 @@ namespace SASDesktop.ViewModels.Transport
             set 
             {
                 _brandSearch = value;
-
-                // Обновление подсказок
-                // Если value - пустая строка, то в список попадают все
-                // сущности
-                var db = new Models.SASEntities();
-                SuggestedBrands = new List<Models.Brand>(
-                    db.Brands.Where(b =>
-                        string.IsNullOrWhiteSpace(_brandSearch) ||
-                        b.Name.ToLower().Contains(_brandSearch.ToLower())
-                    )
-                );
-
+                UpdateBrandSuggestions();
                 RaisePropertyChanged(nameof(BrandSearch)); 
             }
         }
         // Должны ли быть видны подсказки?
-        public bool BrandSuggestionsVisible { get; set; }
+        private bool _brandSuggestionsVisible;
+        public bool BrandSuggestionsVisible 
+        {
+            get { return _brandSuggestionsVisible; }
+            set 
+            { 
+                _brandSuggestionsVisible = value;
+                if (value == true)
+                {
+                    UpdateBrandSuggestions();
+                }
+                RaisePropertyChanged(nameof(BrandSuggestionsVisible));
+            }
+        }
         // Сфокусировано ли поле ввода в поиске?
         private bool _brandSearchFocus;
         public bool BrandSearchFocus
@@ -91,7 +89,27 @@ namespace SASDesktop.ViewModels.Transport
         public Create() 
         {
             var db = new Models.SASEntities();
+            _selectedBrand = null;
             _suggestedBrands = new List<Models.Brand>();
         }
+
+        /// <summary>
+        /// Обновляет подсказки производителей
+        /// </summary>
+        private void UpdateBrandSuggestions()
+        {
+            var db = new Models.SASEntities();
+            if (string.IsNullOrWhiteSpace(_brandSearch))
+            {
+                // Если _brandSearch - пустая строка, то в список попадают все сущности
+                SuggestedBrands = new List<Models.Brand>(db.Brands);
+            }
+            else
+            {
+                SuggestedBrands = new List<Models.Brand>(
+                    db.Brands.Where(b => b.Name.ToLower().Contains(_brandSearch.ToLower()))
+                );
+            }
+        }
     }
 }

+ 3 - 2
src/SASDesktop/Views/Transport/Create.xaml

@@ -51,7 +51,8 @@
                         <StackPanel>
                             <TextBox
                                 x:Name="tbBrand"
-                                IsFocused="{Binding BrandSearchFocus}"
+                                GotFocus="tbBrand_GotFocus"
+                                LostFocus="tbBrand_LostFocus"
                                 Text="{Binding BrandSearch,UpdateSourceTrigger=PropertyChanged}"/>
                             <Popup
                                 IsOpen="{Binding BrandSuggestionsVisible}"
@@ -60,7 +61,7 @@
                                 PlacementTarget="{Binding ElementName=tbBrand}">
                                 <ListBox
                                     ItemsSource="{Binding SuggestedBrands}"
-                                    SelectedItem="{Binding SelectedBrand}">
+                                    SelectionChanged="ListBox_SelectionChanged">
                                     <ListBox.ItemTemplate>
                                         <DataTemplate>
                                             <TextBlock Text="{Binding Name}"/>

+ 28 - 0
src/SASDesktop/Views/Transport/Create.xaml.cs

@@ -25,5 +25,33 @@ namespace SASDesktop.Views.Transport
             InitializeComponent();
             DataContext = new ViewModels.Transport.Create();
         }
+
+        private ViewModels.Transport.Create GetTypedContext()
+        {
+            return (DataContext as ViewModels.Transport.Create);
+        }
+
+        #region Подсказки брендов
+        private void tbBrand_GotFocus(object sender, RoutedEventArgs e)
+        {
+            GetTypedContext().BrandSuggestionsVisible = true;
+        }
+
+        #endregion
+
+        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if ((sender as ListBox).SelectedItem is Models.Brand)
+            {
+                GetTypedContext().SelectedBrand = (sender as ListBox).SelectedItem as Models.Brand;
+                // Скрываем подсказки
+                GetTypedContext().BrandSuggestionsVisible = false;
+            }
+        }
+
+        private void tbBrand_LostFocus(object sender, RoutedEventArgs e)
+        {
+            GetTypedContext().BrandSuggestionsVisible = false;
+        }
     }
 }