gpt4 book ai didi

c# - 双向绑定(bind)到 WPF 中多个列表框上的 ListBox SelectedItem

转载 作者:太空狗 更新时间:2023-10-30 01:27:40 27 4
gpt4 key购买 nike

我有一个场景,我有一个全局可用的属性窗口(类似于 Visual Studio 中的属性窗口),它绑定(bind)到我的模型的 SelectedObject 属性。我有许多不同的方法来浏览和选择对象,所以我的第一个尝试是将它们直接绑定(bind)到 SelectedObject。例如:

<ListBox ItemsSource="{Binding ActiveProject.Controllers}" 
SelectedItem="{Binding SelectedObject, Mode=TwoWay}"/>

<ListBox ItemsSource="{Binding ActiveProject.Machines}"
SelectedItem="{Binding SelectedObject, Mode=TwoWay}"/>

当我在每个列表中有多个项目时,这很有效,但如果列表只有一个项目,它就会失败。当我选择该项目时,SelectedObject 不会更新,因为列表仍然认为其原始项目已被选中。我相信会发生这种情况,因为当 SelectedObject 不是列表中的对象时,双向绑定(bind)会简单地忽略来自源的更新,而使列表的 SelectedItem 保持不变。这样,绑定(bind)就会变得不同步。

有谁知道当 SelectedObject 不在列表中时列表框重置其 SelectedItem 的方法吗?有没有更好的方法来解决这个问题?

最佳答案

Dan 的回答也帮助我解决了我的问题。看起来关键是让绑定(bind)对象首先重新绑定(bind)到空值,然后再重新绑定(bind)到新值。

我的解决方案中没有 Postsharp,也不需要维护选定对象的列表,这是我唯一需要的代码。

    Public Property MyProperty() As Object
Get
Return Me._MyProperty
End Get
Set(value As Object)
Me._MyProperty = Nothing

NotifyOfPropertyChange(Function() MyProperty)

Me._MyProperty = value

NotifyOfPropertyChange(Function() MyProperty)
End Set
End Property

关于c# - 双向绑定(bind)到 WPF 中多个列表框上的 ListBox SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com