I\'m trying to bind a CheckBox to a field but also trigger the checkbox\'s IsSelected.
Here is the ListBox setup that is working with the Binding to data
you can use a MultiBinding
with MultiConverter
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource YourMultiBindConverter}">
<Binding Path="IsSelected" RelativeSource={RelativeSource AncestorType=ListBoxItem}"/>
<Binding Path="Checked"/>
</MultiBinding>
</CheckBox.IsChecked>
and create a YourMultiBindConverter that implement IMultiValueConverter
Would it work to bind both UI properties to the Checked
object model property?
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Checked, Mode=OneWay}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Text}" IsChecked="{Binding Checked}"/>
</DataTemplate>
</ListBox.ItemTemplate>
Ok, I answered my own question (and there might better to do this so feel free to add) I added a Click event to the checkbox like so
<ListBox x:Name="lstExclude" Grid.Column="2" SelectionMode="Single" >
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Text}"
IsChecked="{Binding Checked ,Mode=TwoWay}" Click="CheckBox_Click"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
and then added this code for the Click Event
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
var cb = sender as CheckBox;
var item = cb.DataContext;
lstExclude.SelectedItem = item;
}
Now the item gets selected when you click the checkbox (checked or unchecked) and the item is available to the 'lstExclude.SelectedIndex' method
I hope this helps anybody coming along with the same problem.
<CheckBox Padding="10"
IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type
ListBoxItem}}, Path=IsSelected}">
<CheckBox.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</CheckBox.LayoutTransform>
</CheckBox>