【问题标题】:C# Update Combobox text after SelectedItemChangeC# 在 SelectedItemChange 之后更新组合框文本
【发布时间】:2018-09-07 19:10:39
【问题描述】:

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

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

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 text == 新文件

这里的 FileBox.Text 代码可以正常工作并将其更新回 File

我是否需要在 SelectionChanged 事件之外再次设置文本,如果需要,我将如何执行此操作?

谢谢

编辑

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

【问题讨论】:

  • 所以基本上,您希望您的组合框在您的代码获得用户选择的项目后再次选择默认选定项目“文件”?
  • 你试过FileBox.SelectedIndex = -1吗?
  • @Mac 是的,这就是我所需要的
  • @LennartStoop 刚刚尝试过,这似乎不起作用

标签: c# wpf combobox


【解决方案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);
            }
        }

检查您的输出窗口。

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2016-12-06
    相关资源
    最近更新 更多