gpt4 book ai didi

c# - 数据绑定(bind) ListBox SelectedItems 属性

转载 作者:行者123 更新时间:2023-12-03 10:27:57 25 4
gpt4 key购买 nike

我知道 ListBox 同时具有 SelectedItem 和 SelectedItems 属性,并且只有 SelectedItem 属性可用于数据绑定(bind)。但是,我已经在多个位置阅读过这样的设置

<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>

然后通过添加以下属性
public IEnumerable<Item> SelectedItems
{
get
{
return Items.Where(x => x.IsSelected);
}
}

我可以使用 SelectedItems 属性来获取所有被选中的项目。对此我主要有两个问题:
  • 属性(property)中的元素和元素来自哪里?我无法找到一个 using 指令来消除阻止我使用它的错误。
  • 这是推荐的方法来做我想要实现的目标。如果没有,那你会推荐什么?

  • 哦,在我忘记之前我想我应该提到我正在使用 MVVM Light 和 Fody 的 PropertyChanged。

    最佳答案

    我不太确定这些文章及其确切的解决方案,但我的猜测是:

  • 整个页面有一个名为 MyPageViewModel 的 ViewModel .
  • MyPageViewModel有一个 ObservableCollection命名为 Items .
  • Item是 ViewModel 类型(源自 DependencyObject )
  • Item有一个 DependencyProperty命名为 IsSelected

  • 鉴于这些假设,您可以看到所有事物都适合的地方。

    如果整个页面的DataContext是 MyPageViewModel ,然后在此 xaml 代码中首先 IsSelectedListBoxItem 的属性,第二个是指 ViewModel 中的一个属性 Item .
    <ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
    <Setter Property="IsSelected" Value="{Binding IsSelected}" />
    </Style>
    </ListBox.ItemContainerStyle>
    </ListBox>
    //This is inside MyPageViewModel
    //Item is a ViewModel type
    public IEnumerable<Item> SelectedItems
    {
    get
    {
    //Items is ObservableCollection<Item>
    return Items.Where(x => x.IsSelected);
    }
    }

    //This is also inside MyPageViewModel
    private ObservableCollection<Item> _items = new ObservableCollection<Item>();
    public ObservableCollection<Item> Items { get { return _items; } }

    整个情况也可以反过来。我的意思是它可以在 View 而不是 ViewModel 中实现。也许从 ListBox 派生并覆盖一些东西,包括 SelectedItems .但是将这些复杂性添加到 ViewModel 比 View 更好。

    关于c# - 数据绑定(bind) ListBox SelectedItems 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28517377/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com