【问题标题】:ComboBox SelectedItem change notification not always workingComboBox SelectedItem 更改通知并不总是有效
【发布时间】:2014-06-12 14:32:47
【问题描述】:

我有一个非常莫名其妙的问题。我有一个应用程序可以在大多数平台上正常工作,但不能在特定机器上工作。我们甚至在与失败的机器相同类型的机器上测试了这个应用程序,它工作得很好。它只是一台特定的机器。

问题是:在 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

【问题讨论】:

  • BackEnd.Instance.Reconfigure()的定义是什么;
  • 发生这种情况的原因可能有上百万个......我们无法猜测它是什么。您可以做的最好的事情是添加某种日志记录,让您看到该机器上的代码中实际发生了什么。为代码中的每一行或函数输出一行文本。当您检查日志文件输出时,您将能够准确确定代码中的问题所在并从那里继续。
  • 你忽略了细节。 set 是否被调用?
  • 模拟 UpdateConfiguration 中的故障,看看在控制环境中是否出现相同的症状。
  • 我可以尝试添加一些日志记录。在客户完成当天的机器之前,我无法做到这一点。 set 方法似乎根本没有被调用。我提到的两个症状证明了这一点。 @codeVillagerCU0 - BackEnd.Instance.Reconfigure() 的定义无关紧要。

标签: c# wpf xaml combobox selecteditem


【解决方案1】:

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

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

安装 .NET 4.5.1 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 2021-09-26
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    相关资源
    最近更新 更多