Список привязки WPF к редактируемой колонке комбинированного списка данных - PullRequest
0 голосов
/ 11 октября 2018

Так что в настоящее время я могу привязать список объектов к столбцу комбинированного списка из кода, но мне трудно сделать его редактируемым

См. Мой код ниже

Мой 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, которое было бы потрясающим

Спасибо

Редактировать:

Между прочим, это не дубликат, поскольку я видел решения со столбцом шаблона сетки данных, но когда я использую столбец шаблона, я не могу связать список из кода .. (я не говорю этоневозможно, я говорю, что не могу .. Если вы можете помочь, пожалуйста:))

1 Ответ

0 голосов
/ 11 октября 2018

Настройте свой столбец по-другому, создав столбец шаблона и создав ComboBox в шаблоне данных с привязками.

Это основано на ответе, найденном здесь: Editabe DatagridComboBoxColumn в WPF с использованием C #

<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.

ViewModel:

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, я бы так и сделал.Я нашел пример, который я позаимствовал у См. Ответ Слаумы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...