SelectedItemChange

时间:2018-09-07 09:51:03

标签: c# wpf combobox

我有一个组合框,希望物理显示的文本始终保持不变。

我希望用户选择一个项目,然后将其传入,但组合框上的实际文本保持不变。

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事件之外再次设置文本,如果是的话,我该怎么做?

谢谢

编辑

我认为这不是所发布内容的重复,因为他希望在选择某项内容后消失默认值,我希望它重新出现

1 个答案:

答案 0 :(得分:1)

这种方法实际上并不理想,您应该使用 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);
            }
        }

检查您的输出窗口。