ThabetMicrosoft Ответов: 2

Как очистить combobox после исследования в WPF?


У меня было исследование по критериям с двумя combobox, оно отлично работает после завершения исследования, у меня есть кнопка Display All : сбросить combobox на null..и DataGrid display со всеми элементами ,

Проблема в том, что combobox должен быть пустым, когда я нажимаю на кнопку Dispaly All!

1) без выбора элемента в combobox(просто dispaly datagrid): у меня есть 6 элементов в datagrid, это правильно..и combobox пусты.

2) После выбора критериев поиска у меня есть правильный результат: (у меня есть всего 3 результата, это правильное действие)

3) Когда я нажимаю на кнопку Display All:(у меня есть все элементы в datagrid, 6 элементов..Это правильно) Но комбо-бокс не пуст!!

Вид:


The ViewModel:


Что я уже пробовал:

<pre>    <Window x:Class="WPFAuthentification.Views.BusinesseventsView"

         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" >   

     <Label Content="Entity Type" Width="128" Grid.Row="1" Grid.ColumnSpan="2"/>
     <ComboBox HorizontalAlignment="Center" VerticalAlignment="Center"  

         ItemsSource="{Binding EntityLevelEnum}" 

        SelectedItem="{Binding EntityType, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, TargetNullValue=''}"

        Grid.ColumnSpan="2" Grid.Column="1"  />


        <Button Content="Dislplay all" ToolTip="Display All Business Events" 

                VerticalAlignment="Top"  Command="{Binding Initialize}" 

                Visibility="{Binding Path=ShowDisplayAllButton, Converter={StaticResource BoolToVis}}"  />

         <DataGrid ..... />
    </Window>


<pre>    class BusinesseventsViewModel : ViewModelBase1
    {

        private ObservableCollection<BusinessEventClass> businessEventsList;    

        private RelayCommand<string> initialize;
        public RelayCommand<string> Initialize
        {
            get { return initialize; }
        }       
        public BusinesseventsViewModel()
        {
            //businessEventsList: to Get all the Business events
            businessEventsList = new ObservableCollection<BusinessEventClass>(WCFclient.getAllBusinessEvent());
            //Enumeration of Entity Type and Criticality
            levelCriticalityEnum = new ObservableCollection<Level_Criticality>(Enum.GetValues(typeof(Level_Criticality)).Cast<Level_Criticality>());
            entityLevelEnum = new ObservableCollection<BusinessEntityLevel>(Enum.GetValues(typeof(BusinessEntityLevel)).Cast<BusinessEntityLevel>());
            //the Button Display All :
            initialize = new RelayCommand<string>(initFunc);    
       }        

       //Function of the Button Display All
        private void initFunc(object obj)
        {
      entityLevelEnum.Clear();
          //  EntityLevelEnum = null;
            levelCriticalityEnum.Clear();
            //LevelCriticalityEnum = null;
            OnPropertyChanged("EntityLevelEnum");
            OnPropertyChanged("LevelCriticalityEnum");    
			}     

         private string  entityType;
        public string EntityType
        {
            get { return entityType; }
            set
            {
                entityType = value;
                businessEventsList = filterByCriteria(entityType, criticality);
                OnPropertyChanged("BusinessEventsList");
                OnPropertyChanged("EntityType");
            }
        } 

             //Function of the research :
                 public ObservableCollection<BusinessEventClass> filterByCriteria(string entityType, string criticality)
        {               
            BusinessEventsList = new ObservableCollection<BusinessEventClass>(WCFclient.getAllBusinessEvent());         

            ObservableCollection<BusinessEventClass> updatedList = new ObservableCollection<BusinessEventClass>();

            if ((entityType == null) && (Criticality == null))
            {
                updatedList = businessEventsList;
                levelCriticalityEnum = new ObservableCollection<Level_Criticality>(Enum.GetValues(typeof(Level_Criticality)).Cast<Level_Criticality>());     
                 entityLevelEnum = new ObservableCollection<BusinessEntityLevel>(Enum.GetValues(typeof(BusinessEntityLevel)).Cast<BusinessEntityLevel>());

            }          

            if ((entityType != null && entityType != "") && (Criticality != null))
                {
                    updatedList = new ObservableCollection<BusinessEventClass>(BusinessEventsList.Where(a => a.EntityType.ToString().ToLower().Equals(criticality.ToString())
                                                                             && a.Critciality.ToString().Equals(criticality.ToString())));
                } }

2 Ответов

Рейтинг:
7

ThabetMicrosoft

Спасибо за вашу помощь,
Я нахожу решение:

comboboxname.SelectedIndex = - 1;
в коде позади

private void DisplayAll_Clickk(object sender, RoutedEventArgs e)
        {    //comboCodeType : name of combobox for the EntityType
            comboCodeType.SelectedIndex = -1;
             //comboType: name of combobox for the Criticality
            comboType.SelectedIndex = -1;
        }


Это прекрасно работает.


Рейтинг:
1

Graeme_Grant

Разоблачать BusinessEventsList как общественная собственность. Чтобы очистить, позвоните BusinessEventsList.Clear. Новизна BusinessEventsList коллекция разорвет привязку.

Если вы хотите переключить источники для BusinessEventsList, затем выставить CollectionViewSource собственность и привязка к View.

public CollectionViewSource BusinessEventsListCVS { get; private set; }
<ComboBox ItemsSource="{Binding BusinessEventsListCVS.View}" />