【问题标题】:Binding ListBoxItem.ItemSelected to the bound item in Silverlight将 ListBoxItem.ItemSelected 绑定到 Silverlight 中的绑定项
【发布时间】:2010-07-25 19:25:43
【问题描述】:

我正在使用 MVVM 模式Silverlight 4 将 TODO 项的集合绑定到 ListBox。

每个TODO 实体都有一个属性IsSelected。这允许在绑定回 ViewModel 的 UI 中进行多项选择。同时,ViewModel 所做的任何更改都会反映在 View 中。

我基本上是在尝试做 suggested in this answer 的事情。

不幸的是,在 Silverlight(与 WPF 相对)中,由于 SL4 中的 Bindings in a Style Setter are not supported,我无法找到使用模板执行此操作的方法。

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

但与任何其他方法不同 - 这似乎是选定项目列表的双向绑定最可靠的方法。

如何在代码隐藏或 XAML 中表达此绑定?

【问题讨论】:

    标签: silverlight mvvm itemcontainerstyle


    【解决方案1】:

    我知道的最简单的方法是重载 DataTemplate 并使其看起来像 ListBoxItem 选择。我使用 Blend 4.0 Silverlight SDK 中的 DataStateBehavior 将 IsSelected 属性与正确的外观联系起来。

    <i:Interaction.Behaviors>
        <ei:DataStateBehavior Binding="{Binding IsSelected, Mode=TwoWay}" Value="True" TrueState="Selected" FalseState="Unselected"/>                   
    </i:Interaction.Behaviors>
    

    我没有粘贴整个内容,而是链接到我添加到我的博客 here 的帖子。

    【讨论】:

    • +1 伙计,我只是在以这种方式实现一些东西,你的博客文章帮助我确认它会起作用! ;)
    • 这在 WPF 中似乎无法正常工作。这是 WPF 错误吗?由于某种原因,填充颜色不会出现在最初选择的 Person(s) 上。在我手动取消选中并重新选中该框之前,颜色不会出现。已验证它在 Silverlight 中有效。
    • 如原始问题所述,您不应该在 WPF 中需要此解决方案。如果您遇到问题,我建议您点击问题中的答案链接或发布一个新问题,详细说明您所看到的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2011-04-07
    • 2012-04-02
    • 2012-10-28
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多