如何为窗口确定WPF SelectedItem

时间:2008-09-18 15:35:23

标签: wpf selecteditem

我有一个WPF应用程序,在窗口中有许多基于列表的控件,它们都绑定到不同的CollectionViews。

在窗口级别有没有办法获取当前焦点列表控件的当前所选项目?我知道我可以通过查找焦点元素来完成一些相当简单的代码,但是WPF是否支持这个开箱即用的概念?

像Window.CurrentSelectedDataItem这样的东西会很棒。我正在研究如何使用它来集中命令管理,以便根据当前选定的数据项启用禁用命令。

2 个答案:

答案 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元素。