TheBigBearNow Ответов: 1

C# WPF пропустить messagebox в _selectionchanged()


Всем привет,
У меня есть вопрос С C# WPF у меня есть окно, которое передает объект пользователя в следующее окно, и в конструкторе я устанавливаю значение combobox по умолчанию для того, что такое свойство users. В поле combobox_Selection() У меня это так, когда это конкретное свойство выбрано MessageBox.Show(“”,btns) запускается, и вы должны нажать кнопку yes/no. Я хотел бы иметь его так, чтобы он пропускал это окно сообщений в конструкторе, где я автоматически устанавливаю значение.
        public ProfileScreen(User user)
        {
            currentUser = user;
            InitializeComponent();

            if (user.IsCustomer == true)
            {
                Customer customerLoaded = UsersDB.ReadCustomerById(user.UserID);
                PopulateControls(customerLoaded);
//HERE IS WHERE I SET THE COMBOBOX VALUE AND IT RUNS THE MESSAGEBOX
                CboCustomer.SelectedIndex = 2;
                string loadedState = customerLoaded.State;
                ComboboxState.SelectedValue = loadedState;
            }            
        }
private void CboCustomer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string cboValue = "";
            if (CboCustomer.SelectedIndex > 0)
                cboValue = ((ComboBoxItem)CboCustomer.SelectedItem).Content.ToString();

            if(cboValue.Equals("Yes"))
            {
                boolIsCustomer = true;
                User addCustomer = null;
                Customer newCustomer = null;

                MessageBoxResult result = MessageBox.Show("Updating database to customer status.",
                    "Customer Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (result == MessageBoxResult.Yes)
                {
                    if (currentUser.IsCustomer == true)
                    {
                        try
                        {                          
                            Customer custTestID = UsersDB.ReadCustomerById(currentUser.UserID);

                            if(currentUser.UserID == custTestID.UserID)
                            {
                                return;
                            }                            
                        }
                        catch(Exception ex) { MessageBox.Show(ex.Message.ToString()); }
                    }
                }
            }
        }
    }


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

возврат и автоматический выбор
настройка по умолчанию

1 Ответов

Рейтинг:
1

Graeme_Grant

Код делает именно то, что вы просили его сделать. Когда выбор изменяется, по умолчанию выбор отсутствует, то SelectionChanged уволен из метода конструктора. ЕСЛИ вы устанавливаете точку останова на линии CboCustomer.SelectedIndex = 2; затем шагайте через выполнение строка за строкой, вы увидите, как это происходит. Это отладка вызова.

Таким образом, если это не ожидаемое поведение, то вам нужно добавить флаг для быстрого доступа к SelectionChanged событие. Вот как вы это сделаете:

private bool isLoading;

public ProfileScreen(User user)
{
    isLoadiing = true;

    // do initialization here...

    isLoadiing = false;
}

Теперь, когда вы не хотите, чтобы события запускались при инициализации, вы делаете следующее:
private void CboCustomer_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (isloading) return;

    // Code goes here...
}