C # Обновление текста Combobox после SelectedItemChange - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть выпадающий список, который я хотел бы, чтобы физически отображаемый текст всегда оставался неизменным.

Я хочу, чтобы пользователь выбрал элемент, который затем был бы передан, но затем фактический текст в поле со списком остался прежним.

на

FileBox_SelectionChanged(object sender, SelectionChangedEventArgs e)

событие, которое я узнаю, какой предмет был выбран с помощью

 if (((ComboBox)sender).SelectedItem != null)
        {
            if (((ComboBox)sender).SelectedItem.ToString() == "New File")
            {

            }
        }

(я обработаю это позже)

Затем я пытаюсь обновить текст до «Файл».

Я пробовал множество подходов, которые, похоже, не работают.

Я пытался просто сделать

FileBox.text = "File";

this.Dispatcher.Invoke(() =>
        {
            FileBox.Text = "File";
        });

FileBox.SelectedItem = "File";

При отладке на самом деле кажется, что свойство .Text обновляется, но затем кажется, что оно перезаписывается при завершении события. Для тестирования у меня есть кнопка, которая делает:

var text = FileBox.Text;
FileBox.Text = "File";

Когда я выбрал «Новый файл», текст var == Новый файл

А код FileBox.Text здесь работает и обновляет его обратно до File

Нужно ли мне снова устанавливать текст вне события SelectionChanged, и если да, то как мне это сделать?

Спасибо

EDIT

Я не думаю, что это дубликат опубликованного сообщения, поскольку он хочет, чтобы его значение по умолчанию исчезало при выборе чего-либо, я хочу, чтобы оно появилось снова

1 Ответ

0 голосов
/ 07 сентября 2018

Подход на самом деле не идеален, вы должны использовать шаблон MVVM , но это мой ответ на ваш вопрос, надеюсь, это поможет.

<ComboBox x:Name="FileBox"
                  SelectedIndex="0"
                  SelectionChanged="FileBox_OnSelectionChanged"
                  Width="180" Height="50" > 

Code-behind

private void FileBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var fileBox = sender as ComboBox;

            if (fileBox != null)
            {
                var selectedItem = fileBox.SelectedItem;

                // get the selected item.
                Debug.WriteLine(selectedItem);

                fileBox.SelectionChanged -= FileBox_OnSelectionChanged;
                fileBox.SelectedIndex = 0;
                fileBox.SelectionChanged += FileBox_OnSelectionChanged;
            }
        }

Предполагая, что именно так вы заполняете свой контроль:

private void PopulateFileData()
        {
            FileDataList = new List<FileData>
            {
                new FileData{ FileName = "Files", Path = "" },
                new FileData{ FileName = "File 123", Path = @"c:\file1.txt" },
                new FileData{ FileName = "File 456", Path = @"c:\file2.txt" }
            };
        }

        private void FillComboBox()
        {
            foreach (FileData file in FileDataList)
            {
                FileBox.Items.Add(file.FileName);
            }
        }

Проверьте окно вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...