繁体   English   中英

WPF绑定列表到datagrid可编辑组合框列

[英]WPF Binding list to datagrid editable combobox column

因此,目前我可以将对象列表从代码绑定到组合框列,但是我很难使它可编辑

请参阅下面的代码

我的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上添加了一个很棒的事件

谢谢

编辑:

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

通过创建模板列并在数据模板中创建带有绑定的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,这就是我的方法。 我找到了一个我大量借鉴的例子, 请参阅Slauma的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM