ComboBox SelectedItem更改通知并不总是有效

时间:2014-06-12 14:32:47

标签: c# wpf xaml combobox selecteditem

我有一个非常令人困惑的问题。我有一个应用程序在大多数平台上运行良好,但不适用于特定的机器。我们甚至在与失败的机器相同类型的机器上测试了这个应用程序,它运行得很好。它只是一台特定的机器。

问题在于:在GUI中选择新项目时,绑定到ComboBox的SelectedItem属性的属性不会更改。

我想强调的是,我们测试的每台机器都可以正常工作。只有一台机器出现故障(不幸的是,它在客户手中!)。

绑定是

<ComboBox Grid.Row="4"
          Grid.Column="1"
          Width="160"
          Height="28"
          Margin="0, 10, 0, 0"
          FontSize="18"
          VerticalContentAlignment="Center"
          ItemsSource="{Binding VM.Names}"
          SelectedItem="{Binding VM.CurrentName}" />

相关的视图模型代码是

public ObservableCollection<string> Names
{
    set
    {
        m_names = value;
        OnPropertyChanged("Names");
    }
    get { return m_names; }
}

public string CurrentName
{
    set
    {
        m_currentName = value;
        OnPropertyChanged("CurrentName");
         // Set back end cfg
        UpdateConfiguration(CurrentName);

        // Clear everything in UI
        ResetAll();
    }
    get { return m_currentName; }
}

private ObservableCollection<string> m_names;
private string m_currentName;

private void UpdateConfiguration(string name)
{
    if (string.Equals(name, "John", StringComparison.CurrentCultureIgnoreCase))
    {
        Config.LastName = "Doe";
    }
    else
    {
        Config.LastName = "Smith";
    }

    // Configure back end
    BackEnd.Instance.Reconfigure();
}

(原谅UpdateConfiguration()函数。我修改了它但是尽可能完整地保留了它,而没有泄露任何公司的敏感信息)

我们在失败的机器上观察到的两个明显症状是: 1)Name的当前值不会在退出时保存到文件中。该值在所有其他计算机上正确保存。 2)不调用ResetAll()函数。

我很感激任何人都知道为什么这只会在一台机器上失败。我也很感激有关如何解决问题或解决问题的任何建议。

非常感谢!

JAB

1 个答案:

答案 0 :(得分:0)

我发现了问题。这是.NET版本。

我们的产品不使用.NET 4.5,但我们一直在安装它。如果启动我们的应用程序,它会将.NET版本报告为4.0.30319.18408。我们在客户机器上的应用报告4.0.30319.17929。不同之处在于客户安装了.NET 4.5,我们安装了.NET 4.5.1。

安装.NET 4.5.1可以解决问题。