WPF 将列表绑定到数据网格可编辑组合框列



所以目前我可以将对象列表从代码绑定到 combobox 列,但我很难使其可编辑

请参阅下面的代码

我的 Xaml

<DataGridComboBoxColumn x:Name="dgEmpcmbName" SelectedValueBinding="{Binding ID, UpdateSourceTrigger=LostFocus}" ClipboardContentBinding="{x:Null}" Header="Employee name" Width="Auto"/>

我的 cs 文件

dgEmpcmbName.ItemsSource = people.ToList();
dgEmpcmbName.SelectedValuePath = "ID";
dgEmpcmbName.DisplayMemberPath = "Name";

如果有人知道如何使其可编辑或只是在 SelectionChanged 上添加一个事件,那就太棒了

谢谢

编辑:

顺便说一句,这不是重复的,因为我已经看到了带有数据网格模板列的解决方案,但是当我使用模板列时,我无法从代码中绑定列表。(我不是说不可能,我是说我不能。如果您可以,请协助:)(

通过创建模板列并使用绑定在数据模板中创建 ComboBox 来以不同的方式设置列。

这是基于此处找到的答案:使用C#的WPF中的Editabe DatagridComboBoxColumn。

<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Employee name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" Text="{Binding People.Name}" ItemsSource="{Binding People}" SelectedValue="{Binding People.ID}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>

编辑: 我认为这就是你要找的。 在此示例中,我有一个绑定到 XAML 窗体的视图模型。

视图模型:

public class MainWindowViewModel 
{
public MainWindowViewModel()
{
GridItems = new ObservableCollection<GridItem>() {
new GridItem() { Name = "Chef", PeopleId = 1 } };
PeopleItems = new ObservableCollection<PeopleItem>() {
new PeopleItem() { ID = 1, Name = "George" },
new PeopleItem() { ID = 2, Name = "Martha" } };
}
public ObservableCollection<GridItem> GridItems { get; set; }
public static ObservableCollection<PeopleItem> PeopleItems { get; set; }
}
public class GridItem
{
public string Name { get; set; }
public int PeopleId { get; set; }
}
public class PeopleItem
{
public int ID { get; set; }
public string Name { get; set; }
}

然后,XAML 窗体:

<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"
>
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding GridItems}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
<DataGridComboBoxColumn
ItemsSource="{Binding Source={x:Static local:MainWindowViewModel.PeopleItems }}" 
DisplayMemberPath="Name"
SelectedValuePath="ID"
SelectedValueBinding="{Binding CompanyID}" />
</DataGrid.Columns>
</DataGrid>

使用你的 DataGridTemplateColumn,这就是我会这样做的方式。 我找到了一个我大量借鉴的例子,见斯劳马的答案

最新更新