1

在 WPF 中,我曾经这样做过:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="IsSelected" Value="{Binding IsSelected}" />
    </Style>
</ListBox.ItemContainerStyle>

这不适用于 Windows Phone 8 应用程序,因为我期望该属性是只读的。

我该怎么做这个简单的任务?

谢谢。

4

1 回答 1

1

我之前遇到过这个问题,似乎不支持通过属性设置器进行绑定。但是,有一种解决方法。您可以继承 ListBox 并覆盖PrepareContainerForItemOverride。在需要添加到列表中的每个项目上调用此方法,这使其成为在那里设置绑定的理想场所。在这种情况下,您不需要对 Xaml 进行任何特殊处理

public class ListBoxEx : ListBox {
  protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item) {
    base.PrepareContainerForItemOverride(element, item);
    ((ListBoxItem)element).IsSelected = ((MyModel)item).IsSelected;
  }
}
<local:ListBoxEx>
  <local:ListBoxEx.ItemTemplate>
    <DataTemplate>
      <!-- Bind your properties as you would normally do -->
    </DataTemplate>
  </local:ListBoxEx.ItemTemplate>
</local:ListBoxEx>
于 2013-05-25T22:52:23.970 回答