我有一个组合框,希望物理显示的文本始终保持不变。
我希望用户选择一个项目,然后将其传入,但组合框上的实际文本保持不变。
在
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事件之外再次设置文本,如果是的话,我该怎么做?
谢谢
编辑
我认为这不是所发布内容的重复,因为他希望在选择某项内容后消失默认值,我希望它重新出现
答案 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);
}
}
检查您的输出窗口。