5

我在扩展选择模式中有一个 WPF 列表框。

我需要做的是将 ListBox 绑定到数据项类的可观察集合,这很容易,但本质上是将IsSelected每个 ListBoxItem 的状态绑定到相应数据项中的布尔属性。

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

我查看了许多实现,但没有一个对我有用。它们包括:

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

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

谢谢。标记

4

1 回答 1

13

在 WPF 中,您可以轻松地将 ListBox 绑定到具有 IsSelected 状态的布尔属性的项目集合。如果您的问题是关于 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>
于 2012-11-28T18:02:41.540 回答