关于wpf:在ItemsControl中获取所选项目

您所在的位置:网站首页 地图浙江省丽水市屏都 关于wpf:在ItemsControl中获取所选项目

关于wpf:在ItemsControl中获取所选项目

#关于wpf:在ItemsControl中获取所选项目 | 来源: 网络整理| 查看: 265

我有以下代码以行和列的形式填充我的用户控件。正在填充的用户控件包含按钮,链接,文本框等。当在特定行/列中的特定用户控件上按下某个按钮时,我需要知道该按钮是针对哪个用户控件被按下的。这是在行和列中填充用户控件的XAML

1234567891011121314                                                                                                                                                                                                     

模板基本上是在行/列中填充的UserControl的集合。 最好是我想在ViewModel中执行此操作,但是现在后面的代码中的解决方案也可以工作。

相关讨论 ItemsControl不跟踪所选项目。如果您想要这种行为,请使用ListBox之类的方法并覆盖模板,如下所示

ItemsControl无法选择项目,只能显示收藏集。只有选择器或其后代之一可以选择项。

对于您的情况,我认为带有GridView的ListView将适合。当用户单击该行中的控件时,事件将冒泡到ListView并且该项目将被选中。您可以覆盖默认样式,以便它不会显示为选定的行:WPF ListView关闭选择。

我为您提供解决方案...行为:

1234567891011121314151617181920212223242526272829303132   public static class SelectedItemBehavior    {       public static readonly DependencyProperty BindingProperty =          DependencyProperty.RegisterAttached("Binding", typeof(object), typeof(SelectedItemBehavior),             new FrameworkPropertyMetadata(new object(),                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,                SelectedItem_Changed));       public static object GetBinding(FrameworkElement frameworkElement)       {          return (object)frameworkElement.GetValue(BindingProperty);       }       public static void SetBinding(FrameworkElement frameworkElement, object value)       {          frameworkElement.SetValue(BindingProperty, value);       }       private static void SelectedItem_Changed(Object sender, DependencyPropertyChangedEventArgs e)       {          ToggleButton toggleButton = (ToggleButton)sender;          toggleButton.Checked -= ToggleButtonOnChecked;          toggleButton.IsChecked = e.NewValue?.Equals(toggleButton.DataContext) ?? false;          toggleButton.Checked += ToggleButtonOnChecked;       }       private static void ToggleButtonOnChecked(object sender, RoutedEventArgs e)       {          ToggleButton toggleButton = (ToggleButton)sender;          SetBinding(toggleButton, toggleButton.DataContext);       }    }

然后按以下方式绑定:

1234567891011                                                               


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3