Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果选择第一项,组合框不显示所选项_C#_Combobox_Windows Runtime_Windows Phone 8.1 - Fatal编程技术网

C# 如果选择第一项,组合框不显示所选项

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

我正在从事winrt phone 8.1项目

我有这个组合框

<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交互会使维护变得困难,而且往往会使事情过于复杂。你是否考虑过使用?