首页 > 解决方案 > WPF - 尝试创建绑定到数据源的多选表时使用 Datagrid、ListView 或 Listbox

问题描述

我是 WPF 的新手,我正在尝试重新创建这样的设计:

在此处输入图像描述

我需要的功能是:多选一行的能力(因此右边的复选框),能够绑定到数据源并加载数据的能力。最后,能够在某些行上包含一个小图标。

谷歌搜索后,我发现了 ListView、ListBox 和 DataGrid 控件,但似乎它们都可以做一些事情,但不是我需要的全部。谁能指导我哪个是最好的方法?

标签: c#wpfxaml

解决方案


我个人更喜欢使用DataGrid类似的东西。一旦您习惯了它们,它们就非常灵活且易于使用。我假设您根据您的问题对 WPF 中的绑定有所了解。假设您的类实现iNotifyPropertyChangedaDataGrid应该为您工作。下面的示例,您将不得不根据您的类属性名称更改您的绑定。

这个例子没有使用内置,DataGridCheckBoxColumn因为它往往有问题(即,它需要焦点才能单击它)。这也将让您了解如何实现图标列。您可以通过按住控件并抓取不同的行来进行多行选择,或者您可以使用复选框并将它们绑定到您以后可以访问的类中的属性。

<DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectionMode="Extended">
  <DataGrid.Columns>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <CheckBox IsChecked="{Binding Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTextColumn Header="Name" MinWidth="150" SortMemberPath="Name" Binding="{Binding Name}" IsReadOnly="True"/>
    <DataGridTextColumn Header="University"  Binding="{Binding University}" IsReadOnly="True"/>
    <DataGridTextColumn Header="Age"  Binding="{Binding Age}" IsReadOnly="True"/>
  </DataGrid.Columns>
</DataGrid>

现在只需从您的代码后面绑定到它。

dataGrid.ItemsSource = myClass;

希望这能让你朝着正确的方向开始。


推荐阅读