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
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>
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.