1

我阅读了在 WindowsPhoneGeek 第 1 部分第 2 部分中使用 MultiselectList 示例

当我实现 MultiselectList 的 SelectAll 和 UnSelectAll 函数时,我发现如果项目数超过一定限制,并不是 MultiselectList 中的所有项目都正确选择/取消选择。以下代码中的某些项目不会进入 if 部分

DependencyObject visualItem = itemContainerGenerator.ContainerFromItem(pizzaOption);
MultiselectItem multiselectItem = visualItem as MultiselectItem;
if (multiselectItem != null)
{
    // NOTE: this will also add an item to the SelectedItems collection
    multiselectItem.IsSelected = selected;
}

我想这是因为当时并不是所有的 multiselectItem 都显示在 UI 中。但我确实需要 SelectAll 来选择 MultiselectList 中的所有项目,而不仅仅是 UI 中的项目。我能做些什么?我一直在考虑将 IsSelected 属性绑定到 viewmodel 作为解决方法,但我尝试了以下代码并在解析该页面的 xaml 时出现异常。

<toolkit:MultiselectList.ItemContainerStyle>
    <Style TargetType="toolkit:MultiselectItem">
        <Setter Property="HintPanelHeight" Value="75"/>
        <Setter Property="IsSelected" Value="{Binding IsMarked, Mode=TwoWay}"/>
    </Style>
</toolkit:MultiselectList.ItemContainerStyle>

请帮助我..提前谢谢你:D

4

1 回答 1

0

您收到 xaml 解析错误,因为您的

<Style TargetType="toolkit:MultiselectItem">
        <Setter Property="HintPanelHeight" Value="75"/>
        <Setter Property="IsSelected" Value="{Binding IsMarked, Mode=TwoWay}"/>
</Style>

应该在资源上,比方说

<toolkit:MultiselectList.Resources>
    <Style TargetType="toolkit:MultiselectItem">
            <Setter Property="HintPanelHeight" Value="75"/>
    </Style>
</toolkit:MultiselectList.Resources>

对我来说,我会将 MultiselectList 的数据上下文绑定到一个类,并对其项目进行 foreach,例如

DataContext = new List<ClassADataContext>();

foreach(var items in DataContext)
{
  ... logic
   items.IsMarked = false; or whatever
}
于 2012-04-12T03:21:58.793 回答