ComboBox不会将先前的项值设置为false

时间:2014-07-27 12:22:04

标签: c# xaml combobox windows-phone-8.1

我有一个应用程序,允许用户在TextBox中键入一个值,然后将其从第一个ComboBox中的值转换为第二个ComboBox中的值,然后显示结果是另一个TextBox

示例:

  1. 用户选择" Degree"在第一个ComboBox
  2. 用户在TextBox
  3. 中输入值
  4. 用户选择" Radian"在第二个ComboBox
  5. 转换为Radian的度数并在下面的TextBox中正确显示。
  6. 用户更改第二个ComboBox以显示" Gon"。
  7. (最后一次)TextBox中的值未更新,并显示旧值。 我该如何解决这个问题?
  8. 换句话说: 如何重置ComboBox以便它不记得之前设置的内容?

    我已经搜了几个小时,但没有运气。但是,我确实弄清楚了为什么会发生这种情况以及如何解决它(尽管不是最佳解决方案)。看起来它已经为所选内容设置了值,然后在我的if else条件中选择第一个(参见下面的代码)。

    我要解决的问题是在DropDownOpened="ComboBox_DropDownOpened" XAML中设置ComboBox,并且在该方法中,每次{{1}都将ComboBox中的所有值设置为false打开。但是,这不是最优的,因为ComboBox中有很多项目。

    我还尝试为ComboBox设置ComboBoxes(重置它),但它不起作用。


    [已解决]第二个问题:我们在做什么,有没有办法改善我的" myComboBox.SelectedItem = -1"方法? (见下面的代码)因为最后它必须检查10 * 10项,导致100 if else语句!

    编辑:我去了一个跑步,意识到我可以使用嵌套的if循环! (我现在感觉很愚蠢)..所以不要让它可能通过if语句performCalculation()次(对于我的最坏情况,最多100次),它只会{{1}现在的时间(最坏情况下最多X * Y次):))

    第一个问题仍然没有答案!

    以下是我的代码片段:

    XAML:

    X + Y

    C#:

    10 + 10

    if语句的新代码:

               <ComboBox x:Name="ComboBoxIn" DropDownOpened="ComboBoxIn_DropDownOpened"SelectionChanged="ComboBox_SelectionChanged" DropDownClosed="ComboBox_DropDownClosed" >
                    <ComboBoxItem x:Name="DegreeIn" Content="Degree"/>
                    <ComboBoxItem x:Name="RadianIn" Content="Radian"/>
                    <ComboBoxItem x:Name="GonIn" Content="Gon"/>
                    <ComboBoxItem x:Name="MilIn" Content="Mil"/>
                    <ComboBoxItem x:Name="MinutesIn" Content="Minutes"/>
                    <ComboBoxItem x:Name="OctantIn" Content="Octant"/>
                    <ComboBoxItem x:Name="QuadrantIn" Content="Quadrant"/>
                    <ComboBoxItem x:Name="RevolutionIn" Content="Revolution"/>
                    <ComboBoxItem x:Name="SecondsIn" Content="Seconds"/>
                    <ComboBoxItem x:Name="SextantIn" Content="Sextant"/>
                </ComboBox>
    

    所有的angle.DegreeToRadian等方法只计算OutputValueTextBox中显示的内容。

    示例:

    private void ComboBoxIn_DropDownOpened(object sender, object e)
        {
            DegreeIn.IsSelected = false;
            RadianIn.IsSelected = false;
            GonIn.IsSelected = false;
            // Not very optimal. I have one for each item in the ComboBox(and there are two ComboBoxes)
        }
    
        private void ComboBox_DropDownClosed(object sender, object e)
        {
            performCalculation();
        }
    
        private void performCalculation()
        {
            // This poor writing have been fixed. I'll leave it like this and post my new code below
            // if anyone else want to have a look at it.
            if (DegreeIn.IsSelected && RadianOut.IsSelected)
            {
                angle.DegreeToRadian(InputValueTextBox.Text);
            }
            else if (DegreeIn.IsSelected && DegreeOut.IsSelected)
            {
                angle.DegreeToDegree(InputValueTextBox.Text);
            }
            else if (DegreeIn.IsSelected && GonOut.IsSelected)
            {
                angle.DegreeToGon(InputValueTextBox.Text);
            }
            else if (RadianIn.IsSelected && DegreeOut.IsSelected)
            {
                angle.RadianToDegree(InputValueTextBox.Text);
            }
            OutputValueTextBox.Text = angle.TotalValue;
        }
    

    谢谢!

0 个答案:

没有答案