我编写了一个小型 WPF 应用程序来编辑配置文件。GUI 主要由两个 ListBox 组成。第二个 ListBox 的内容取决于第一个 ListBox 的选定项,并且只要第一个 ListBox 中的另一个项被选中,就应该更新。我使用第一个 ListBox 的 SelectionChanged 事件来设置第二个 ListBox 的 ItemsSource 来实现这一点。在我的机器上构建并测试它。工作(并且仍然工作)很好。然后我将应用程序发送给我的同事,以便他可以试用该应用程序。在他的机器上,第二个 ListBox 没有更新(当他第一次从第一个 ListBox 中选择一个项目时,第二个按预期更改,但如果他随后选择了另一个项目,则不会)。
我缩小了问题范围,发现事件按预期提出,但SelectedItem
属性没有改变。
我能够通过使用正确更新的AddedItems
属性来解决问题。SelectionChangedEventArgs
有谁知道为什么会这样?此外,所选项目正确突出显示。那么 WPF 是否使用另一个属性来确定要突出显示的项目?如果是这样,他们怎么会不同步?
万一有人问这里是相关的代码片段
列表框:
<ListBox Name="lb_Users" SelectionChanged="lb_Users_SelectionChanged">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" Click="UserRemove_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
和更新的处理程序:
private void lb_Users_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if((e.AddedItems[0] as User)!= null)
lb_VMs.ItemsSource = (e.AddedItems[0] as User).GetVMs();
}