wpf - 如何将 ListBoxItem.IsSelected 绑定(bind)到 bool 数据属性

标签 wpf silverlight

我有一个处于扩展选择模式的 WPF 列表框。

我需要做的是将 ListBox 绑定(bind)到数据项类的可观察集合,这很简单,但本质上是将每个 ListBoxItem 的 IsSelected 状态绑定(bind)到各自的 bool 属性数据项。

而且,我需要它是双向的,以便我可以使用 ViewModel 中选定和未选定的项目填充 ListBox。

我已经研究了许多实现,但没有一个对我有用。它们包括:

  • 将 DataTrigger 添加到 ListBoxItem 的样式并调用状态操作更改

我意识到这可以通过事件处理程序在代码隐藏中完成,但考虑到域的复杂性,它会非常困惑。我宁愿坚持使用 ViewModel 进行双向绑定(bind)。

谢谢。 标记

最佳答案

在 WPF 中,您可以轻松地将 ListBox 绑定(bind)到具有 IsSelected 状态 bool 属性的项目集合。如果您的问题是关于 Silverlight 的,恐怕它不会那么简单。

public class Item : INotifyPropertyChanged
{
    // INotifyPropertyChanged stuff not shown here for brevity
    public string ItemText { get; set; }
    public bool IsItemSelected { get; set; }
}

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
        Items = new ObservableCollection<Item>();
    }

    // INotifyPropertyChanged stuff not shown here for brevity
    public ObservableCollection<Item> Items { get; set; }
}
<小时/>
<ListBox ItemsSource="{Binding Items, Source={StaticResource ViewModel}}"
         SelectionMode="Extended">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsSelected" Value="{Binding IsItemSelected}"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ItemText}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

关于wpf - 如何将 ListBoxItem.IsSelected 绑定(bind)到 bool 数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611113/

相关文章:

wpf - 在带有默认按钮的对话框上按 Enter 时,数据绑定(bind)不会更新属性

c# - 防止只读文本框在 Silverlight 中变灰

Silverlights Dataform 与 MVVM 和 WCF Ria 服务

wpf - 带有Microsoft WPF功能区的窗口样式与Windows 8样式不匹配

将多个结果转换为逗号分隔字符串的 WPF XPath 绑定(bind)

c# - 优秀的 Silverlight 自定义项目控件教程

c# - 样式之间的淡入淡出过渡

silverlight - 当 uielements 有边距时 ScrollViewer 不起作用

c# - 尝试使用 Visual Studio UI 测试器时出现 FailedToperformActionOnBlockedControlException

c# - 如何在不影响数据源的情况下交换 WPF 中已过滤数据网格中的行?