【问题标题】:Getting Listbox.SelectedItems获取 Listbox.SelectedItems
【发布时间】:2016-08-16 13:21:05
【问题描述】:

那么,如果我有一个变量集合,这些变量已经分配了数据并绑定到列表框项模板,我该如何根据列表框项的选择来获取数据集合?

<ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" Height="500">
                    <Image Source="{Binding img }" Width="853" Height="480" VerticalAlignment="Top" Margin="0,10,8,0"/>
                    <StackPanel Width="370">
                        <TextBlock Text="{Binding text}" Foreground="#FFC8AB14" FontSize="28" />
                        <TextBlock Text="{Binding text2}" TextWrapping="Wrap" FontSize="24" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

C#:

 public class collection
    {
        public string text { get; set; }
        public string img { get; set; }
        public string text2 { get; set; }
    }

    private void ListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       ListBox1.SelectedItems
        //how do you get the selected data in the img, text, text2 on selection?
    }

【问题讨论】:

  • 为什么要绑定变量集合,而不是将这些变量作为属性分组到一个类中,然后绑定该类对象集合会更容易。
  • 你有一个你也绑定的集合列表作为列表框的itemsource吗?还是您绑定到 1 个集合实例?
  • 集合类只是模型,你如何填充你的列表框?

标签: c# wpf listbox


【解决方案1】:

由于您将 collection 类绑定到 ListBox 中,我认为这是在背面的视图模型中某处完成的。那么最好的方法总是检查ListBox1.SelectedIndex,你也可以在你的视图模型中绑定它,这样你就不必在你的代码隐藏中真正访问它。在这种情况下,您绝对可以使用事件来命令或类似的东西将 SelectionChanged 事件绑定回视图模型。

如果您确实喜欢像您给出的示例一样使用代码隐藏,请查看ListBox1.SelectedIndex 以获取单选策略,ListBox1.SelectedItems 以获取多选策略。

请查看thisthis 以了解有关此处上下文的更多详细信息。 :)

【讨论】:

  • 有趣的方法。我会看看。 :)
【解决方案2】:

您需要cast您的数据。例如使用 LINQ

var items = ListBox1.SelectedItems.Cast<collection>();

然后您可以使用foreach 或类似的方法对它们进行迭代,或访问特定项目,例如

var text1 = items.First().text;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多