C# 如果选择第一项,组合框不显示所选项
我正在从事winrt phone 8.1项目 我有这个组合框C# 如果选择第一项,组合框不显示所选项,c#,combobox,windows-runtime,windows-phone-8.1,C#,Combobox,Windows Runtime,Windows Phone 8.1,我正在从事winrt phone 8.1项目 我有这个组合框 <ComboBox PickerFlyoutBase.Title=" " Name="ModelComboBox" x:Uid="ModelComboBox" DisplayMemberPath="vcModel" IsEnabled="False" /> private void MakeComboBox_SelectionChanged(object sender, SelectionChangedEve
<ComboBox PickerFlyoutBase.Title=" " Name="ModelComboBox" x:Uid="ModelComboBox" DisplayMemberPath="vcModel" IsEnabled="False" />
private void MakeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (MakeComboBox.SelectedValue != null)
{
List<stbModel> Model = CrudOperations.GetModelById((MakeComboBox.SelectedValue as stbMake).siMakeId);
if (Model != null && Model.Count > 0)
{
ModelComboBox.IsEnabled = true;
ModelComboBox.ItemsSource = Model.OrderBy(x => x.vcModel);
ModelComboBox.SelectedIndex = 0;
}
}
}
只需使用此代码在组合框上方的组合框事件中更改选择
<ComboBox PickerFlyoutBase.Title=" " Name="ModelComboBox" x:Uid="ModelComboBox" DisplayMemberPath="vcModel" IsEnabled="False" />
private void MakeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (MakeComboBox.SelectedValue != null)
{
List<stbModel> Model = CrudOperations.GetModelById((MakeComboBox.SelectedValue as stbMake).siMakeId);
if (Model != null && Model.Count > 0)
{
ModelComboBox.IsEnabled = true;
ModelComboBox.ItemsSource = Model.OrderBy(x => x.vcModel);
ModelComboBox.SelectedIndex = 0;
}
}
}
private void MakeComboBox\u SelectionChanged(对象发送者,SelectionChangedEventArgs e)
{
if(MakeComboBox.SelectedValue!=null)
{
列表模型=crudoOperations.GetModelById((MakeComboBox.SelectedValue作为stbMake.siMakeId);
if(Model!=null&&Model.Count>0)
{
ModelComboBox.IsEnabled=true;
ModelComboBox.ItemsSource=Model.OrderBy(x=>x.vcModel);
ModelComboBox.SelectedIndex=0;
}
}
}
现在的问题是,我不知道为什么每当我从组合框中选择第一个项目时,它在组合框中什么也不显示,而如果我选择除第一个以外的任何项目,它就会在组合框中显示
<ComboBox PickerFlyoutBase.Title=" " Name="ModelComboBox" x:Uid="ModelComboBox" DisplayMemberPath="vcModel" IsEnabled="False" />
private void MakeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (MakeComboBox.SelectedValue != null)
{
List<stbModel> Model = CrudOperations.GetModelById((MakeComboBox.SelectedValue as stbMake).siMakeId);
if (Model != null && Model.Count > 0)
{
ModelComboBox.IsEnabled = true;
ModelComboBox.ItemsSource = Model.OrderBy(x => x.vcModel);
ModelComboBox.SelectedIndex = 0;
}
}
}
如果需要,我可以附上屏幕截图。您是否尝试过设置SelectedIndex的值?默认情况下,选择第一项应为-1 改变 From:ModelCombox.SelectedIndex=0
To:ModelCombox.SelectedIndex=-1 使用MVVM时,直接修改
SelectedIndex
属性会破坏绑定的部分功能。直接设置SelectedItem
属性也有同样的问题
这是不好的,应该由框架记录、防止或适当支持
然而,唯一已知的工作解决方案,也不是一个丑陋的黑客,是通过
ItemsSource
对象也绑定所选项:我猜您的MakeComboBox
有一个初始SelectedIndex
为0
,然后,选择第一项不会触发SelectionChanged
事件,因为选择没有更改。只需检查MakeComboBox
的ItemSource
的设置位置,并且SelectedIndex
不是0
如果我选择任何其他项,然后再次选择第一项,它仍然不会显示任何内容。我移除ModelComboBox.SelectedIndex=0代码>行,它开始工作。我不知道为什么会发生这种情况。在代码隐藏中进行UI交互会使维护变得困难,而且往往会使事情过于复杂。你是否考虑过使用?