【问题标题】:Retaining SelectedItem when Bound ItemSource changesBound ItemSource 更改时保留 SelectedItem
【发布时间】:2011-07-07 18:43:29
【问题描述】:

我有一个绑定到组合框 ItemSource 的语言列表。语言列表会不时更改。发生这种情况时,SelectedItem 将被清除。因为使用了 Binding,所以重新分配旧值似乎不起作用。组合框有

ItemSource = "{Binding Languages, IsAsync = true}"
SelectedItem = "{Binding SelectedLanguage}"

在代码中,我有(大致)

var prevLanguage = this.SelectedLanguage;
this.Languages = newLanguages;

if (this.Languages.Keys.Contains(prevLanguage))
  this.SelectedLanguage = prevLanguage;
else
  this.SelectedLanguage = myDefaultLanguage;

这显然发生得太快了,因为组合框所选项目仍为空白。它没有设置为 prevLanguage 或 myDefaultLanguage。如何确保在 ItemSource 上完成绑定后设置 SelectedLanguage?

【问题讨论】:

  • 这段代码在哪个事件处理程序中运行?
  • 啊,这是一个很好的评论,在我的程序的最后一个版本中,我有绑定语言 IAsync = true。
  • 好吧,我通常不会自己编写 NotifyPropertyChanged,但您可以尝试使用 SelectionChanged 事件来记录所选项目。
  • IsAsync 是这里的问题。

标签: c# wpf binding


【解决方案1】:

问题是语言中的 IsAsync 为真。

【讨论】:

    【解决方案2】:

    如果您使用文本而不是选定的项目会更容易。

          <ComboBox ItemSource = "{Binding Languages, IsAsync = true}"
                          Text = "{Binding SelectedLanguage}"
    

    顺便说一句,而不是使用

             if (this.Languages.Keys.Contains(prevLanguage))
    

    你可以的

           if (this.Languages.ContainKey(prevLanguage))
    

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 2014-11-10
      • 2023-04-06
      • 2012-01-04
      • 1970-01-01
      • 2011-10-13
      • 2017-08-21
      • 2013-04-25
      • 2011-08-06
      相关资源
      最近更新 更多