【问题标题】:How to determine WPF SelectedItem for a window如何确定窗口的 WPF SelectedItem
【发布时间】:2008-09-18 15:35:23
【问题描述】:

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

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

像 Window.CurrentSelectedDataItem 这样的东西会很棒。我正在考虑将其用作集中命令管理的一种方式,以便根据当前选定的数据项启用禁用命令。

【问题讨论】:

    标签: wpf selecteditem


    【解决方案1】:

    我认为没有您指定的属性,但作为替代方案,您可以在 Window 类中为 ListBox.SelectionChanged 事件注册一个 ClassHandler:

    EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged,
        new SelectionChangedEventHandler(this.OnListBoxSelectionChanged));
    

    只要应用程序中任何 ListBox 中的选择发生变化,就会调用此方法。您可以使用 sender 参数来确定是哪个 ListBox 更改了其选择,并在需要时缓存此值。

    【讨论】:

      【解决方案2】:

      我没有尝试过,但您可以尝试使用带有转换器的 MultiBinding 来获取正确的项目:

      <MultiBinding Converter="{StaticResource coalesce}">
          <MultiBinding.Bindings>
              <MultiBinding Converter="{StaticResource nullIfFalse}">
                  <MultiBinding.Bindings>
                       <Binding ElementName="List1" Path="HasFocus" />
                       <Binding ElementName="List1" Path="SelectedItem" />
      

      nullIfFalse返回第二个参数,如果第一个为真,否则为空。 coalesce 返回第一个非空元素。

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-15
        • 1970-01-01
        • 2011-06-24
        • 2017-06-24
        相关资源
        最近更新 更多