我有一个WPF应用程序,在窗口中有许多基于列表的控件,它们都绑定到不同的CollectionViews。
在窗口级别有没有办法获取当前焦点列表控件的当前所选项目?我知道我可以通过查找焦点元素来完成一些相当简单的代码,但是WPF是否支持这个开箱即用的概念?
像Window.CurrentSelectedDataItem这样的东西会很棒。我正在研究如何使用它来集中命令管理,以便根据当前选定的数据项启用禁用命令。
答案 0 :(得分:1)
我认为没有像您指定的属性,但作为替代方案,您可以在Window类中为ListBox.SelectionChanged事件注册ClassHandler:
EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged,
new SelectionChangedEventHandler(this.OnListBoxSelectionChanged));
只要应用程序中的任何ListBox中的选择发生更改,就会调用此方法。您可以使用sender参数来确定更改其选择的ListBox,并在需要时缓存此值。
答案 1 :(得分:0)
我没有试过这个,但您可以尝试使用带转换器的MultiBinding来获取正确的项目:
<MultiBinding Converter="{StaticResource coalesce}">
<MultiBinding.Bindings>
<MultiBinding Converter="{StaticResource nullIfFalse}">
<MultiBinding.Bindings>
<Binding ElementName="List1" Path="HasFocus" />
<Binding ElementName="List1" Path="SelectedItem" />
nullIfFalse
返回第二个参数,如果第一个为true,否则返回null。 coalesce
返回第一个非null元素。