我希望有 ComboBox
用户可以在其中输入一些文本或从下拉列表中选择文本。当用户Enter在键入后按下或从下拉列表中简单选择项目时,绑定源应该更新(本例中为最佳视图行为)。
UpdateSourceTrigger=PropertyChange
设置(默认),源更新将在每个字符之后触发,这不好,因为属性设置器调用很昂贵;UpdateSourceTrigger=LostFocus
设置,然后从下拉列表中选择项目将需要一个更大的动作实际上失去焦点,这是不是很人性化(点击后需要额外的点击来选择项目)。我尝试使用UpdateSourceTrigger=Explicit
,但效果不佳:
<ComboBox IsEditable="True" VerticalAlignment="Top" ItemsSource="{Binding List}"
Text="{Binding Text, UpdateSourceTrigger=LostFocus}"
SelectionChanged="ComboBox_SelectionChanged"
PreviewKeyDown="ComboBox_PreviewKeyDown" LostFocus="ComboBox_LostFocus"/>
public partial class MainWindow : Window
{
private string _text = "Test";
public string Text
{
get { return _text; }
set
{
if (_text != value)
{
_text = value;
MessageBox.Show(value);
}
}
}
public string[] List
{
get { return new[] { "Test", "AnotherTest" }; }
}
public MainWindow()
{
InitializeComponent(); …
Run Code Online (Sandbox Code Playgroud) 我有一个组合框cmbOptions和一个按钮btnShowItem
这是代码:
private void btnShowItem_click(object sender, RoutedEventArgs e)
{
string item = ((ComboBoxItem)cmbOptions.SelectedItem).Content.ToString(); //Exception is here
}
Run Code Online (Sandbox Code Playgroud)
以下是例外情况:
System.InvalidCastException:"无法将'System.String'类型的对象强制转换为'System.Windows.Controls.ComboBoxItem'."
我已经经历过以下的一些链接:
ComboBox- SelectionChanged事件具有旧值,而不是新值
等等..
但没有得到解决方案.
请注意我需要在buttonclick上获取comboboxItem的值,而不是cmbSelectionChange事件