Friday, April 29, 2011

Silverlight MVVM ListBoxItem IsSelected

I have a collection of ViewModels bound to a ListBox. I am trying to bind the IsSelected properties of each together. In WPF it works by setting the style:

<Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>

This does not work in Silverlight. How can I accomplish this?

From stackoverflow
  • In Silverlight, you are not able to create "global" styles, that is, styles that modify all controls of a certain type. Your style needs a key, and your control needs to reference it.

    Also, TargetType simply needs the control type name. Silverlight does not support the x:Type extension.

    ib.

  • Here's how i do it:

    <ListBox.ItemTemplate>
        <DataTemplate>
    ...
    <CheckBox VerticalAlignment="Top" HorizontalAlignment="Left"
              x:Name="CheckBox1" IsChecked="True" Grid.Row="0">
        <inf:BindingHelper.Binding>
            <inf:BindingProperties TargetProperty="Visibility" SourceProperty="IsSelected"
                Converter="{StaticResource VisibilityConverter}"
                RelativeSourceAncestorType="ListBoxItem" />
        </inf:BindingHelper.Binding>
    </CheckBox>
    ...
        </DataTemplate>
    </ListBox.ItemTemplate>
    

    You need to do relative binding, which doesn't exist in Silverlight unfortunately... BindingHelper is a helper class which overcomes this limitation (search for "relative binding in silverlight" to find it).

0 comments:

Post a Comment