可以在MVVM样式中使用MultiselectList(将其IsSelected属性绑定到viewmodel)吗?

时间:2012-04-10 09:33:30

标签: c# windows-phone-7

我阅读了在WindowsPhoneGeek中使用MultiselectList的示例 part1 part2

当我实现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

1 个答案:

答案 0 :(得分: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的datacontext绑定到一个类,并对其项目进行预测,如

DataContext = new List<ClassADataContext>();

foreach(var items in DataContext)
{
  ... logic
   items.IsMarked = false; or whatever
}