【问题标题】:Silverlight MVVM ListBoxItem IsSelectedSilverlight MVVM ListBoxItem IsSelected
【发布时间】:2010-10-19 11:35:38
【问题描述】:
我有一组绑定到 ListBox 的 ViewModel。我正在尝试将每个的 IsSelected 属性绑定在一起。在 WPF 中,它通过设置样式来工作:
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
这在 Silverlight 中不起作用。我怎样才能做到这一点?
【问题讨论】:
标签:
silverlight
mvvm
listbox
【解决方案1】:
在 Silverlight 中,您无法创建“全局”样式,即修改某种类型的所有控件的样式。您的样式需要一个键,并且您的控件需要引用它。
此外,TargetType 只需要控件类型名称。 Silverlight 不支持 x:Type 扩展。
ib.
【解决方案2】:
我是这样做的:
<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>
您需要进行相对绑定,遗憾的是 Silverlight 中不存在这种绑定...
BindingHelper 是一个帮助类,它克服了这个限制(搜索“silverlight 中的相对绑定”来找到它)。