关于wpf:在ItemsControl中获取所选项目 |
您所在的位置:网站首页 › 地图浙江省丽水市屏都 › 关于wpf:在ItemsControl中获取所选项目 |
我有以下代码以行和列的形式填充我的用户控件。正在填充的用户控件包含按钮,链接,文本框等。当在特定行/列中的特定用户控件上按下某个按钮时,我需要知道该按钮是针对哪个用户控件被按下的。这是在行和列中填充用户控件的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 |