【问题标题】:WPF ListBox sometimes ignoring SelectedItem changeWPF ListBox 有时会忽略 SelectedItem 更改
【发布时间】:2013-03-26 12:53:05
【问题描述】:

我有带有下一个属性的列表框:

SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
x:Name="listBox"
ItemsSource="{Binding Items}"

在代码中,我有一个静态模型,它可以在几个窗口中使用。

只能同时显示一个窗口。

如果 UI 已加载,则一切正常。 但是当窗口刚刚准备好加载时,我设置 SelectedItem 什么都不做(第一个项目被选中)

当我设置刹车点时,我注意到 SelectedItem 从视图中调用,带有 NULL 或第一个项目。 (StackTrace 不包含我的代码)

我尝试在视图加载之前和之后设置所选项目:

model.SelectedItem=first;

view.Loaded += (o, e) => 
{
    model.SelectedItem=first; 
}

我还是有同样的问题。

【问题讨论】:

  • 如果你试图执行例如通过命令它有效吗?我知道这不是理想的实现,但我认为您提前调用它,因此 Items 为空。
  • 看起来改变属性的顺序解决了问题...
  • 你能给我一些细节吗?我也对解决方案感兴趣。
  • 我只是在 SelectedItem 之前设置了 ItemsSource,现在它可以工作了。看起来它在设置 ItemsSource 之前尝试 SelectedItem。
  • 啊,我记得。我认为这就像在ComboBox 上创建绑定一样。 WPF 的非常奇怪的行为。

标签: .net wpf mvvm binding listbox


【解决方案1】:

我认为在加载窗口期间会评估 Xaml DataBinding。 因此,如果在 Window.Loaded 发生之前被触发,SelectedItemSelectionChanged 事件中为空是正常的。

您可以通过在窗口完全加载之前检查您的列表框是否有项目来验证这一点。

【讨论】:

    【解决方案2】:

    Сhanging order of properties 解决了这个问题。 先绑定 ItemsSource,再绑定 SelectedItem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      相关资源
      最近更新 更多