Getting selected item in ItemsControl

后端 未结 2 1939
遥遥无期
遥遥无期 2021-02-13 15:18

I have the following code which populates my user control in form of rows and column. The user control which is being populated contains Button, links, textbox etc. When a certa

相关标签:
2条回答
  • 2021-02-13 15:33

    I have a solution for you...a behavior:

       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);
          }
       }
    

    Then bind as follows:

        <ItemsControl
            Name="ItemsControlList"
            Width="200"
            Height="100"
            ItemsSource="{Binding Values}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <RadioButton local:SelectedItemBehavior.Binding="{Binding ElementName=ItemsControlList, Path=DataContext.SelectedValue}" Content="{Binding}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    
    0 讨论(0)
  • 2021-02-13 15:40

    ItemsControl can't select items, only present collections. Only a Selector or one of it's descendants can select items.

    For your scenario, I think a ListView with GridView would fit. When the user would click a control in the line, the event would bubble to the ListView and the item would get selected. You can override the default styles so it wouldn't display as selected line: WPF ListView turn off selection.

    0 讨论(0)
提交回复
热议问题