Získávání dat v Seznamu do DataGrid ComboBox

0

Otázka

Mám potíže při získávání položky ze seznamu do pole se seznamem sloupce v datagridu ve WPF. Tohle je pro mě nové, takže jakákoliv pomoc by bylo velmi ocenil. Zdá se, že existuje mnoho způsobů, jak to udělat, ale nebyl jsem schopen dostat žádný z nich do práce.

"'

                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Positionname}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="poscombo Loaded="comboposloaded"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            
            </DataGridTemplateColumn>

Seznam s Údaji v kódu za

 List<Positions> PositionList = new List<Positions>();

AKTUALIZACE: Skončil jsem přidání načítání událost vytáhnout seznam jako itemsource. Otázkou nyní je, jak získat vybrané hodnoty z pole se seznamem zpět do bloku textu?

C# Přidáno, aby si combo naloženo.

    private void comboposloaded(object sender, RoutedEventArgs e)
    {
        ComboBox cmb = (ComboBox)sender;
        cmb.ItemsSource = PositionList;
        cmb.DisplayMemberPath = "info";
        cmb.SelectedValuePath = "psnme";

    }
c# combobox datagrid wpf
2021-11-19 03:06:28
2

Nejlepší odpověď

0

Otázkou nyní je, jak získat vybrané hodnoty z pole se seznamem zpět do bloku textu?

Vázat psnme vlastnost Positions objekt Positionname vlastnost data objektu:

<ComboBox x:Name="poscombo" Loaded="comboposloaded"
          SelectedValue="{Binding Positionname, UpdateSourceTrigger=PropertyChanged}"/>
2021-11-19 15:00:41
0

Údaje závazné pro DataGridComboBoxColumn vypadá trochu složitější, než si možná myslíte.

  1. Použití ObservableCollection místo Seznamu. To bude automaticky aktualizovat obsah ovládacího prvku DataGrid.
  2. Můžete načíst data do pole se seznamem pomocí ObjectDataProvide. To také zajistí, že data ve zdroji se automaticky aktualizuje. Zde je funkční příklad.
    public partial class MainWindow : Window
    {
        public EmployeeViewModel EmployeeVM;
        public MainWindow()
        {
            InitializeComponent();
            EmployeeVM = new EmployeeViewModel();
            MyDataGrid.ItemsSource = EmployeeVM.EmployeeList;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public PositionEnum Position { get; set; }
    }

    public enum PositionEnum { Marketeer, Mechanic, Accountant };
    public class EmployeeViewModel 
    {
        public ObservableCollection<Employee> EmployeeList =
          new ObservableCollection<Employee>();
        public EmployeeViewModel()
        { 
            EmployeeList.Add(new Employee()
             { Name = "James Smith", Position = PositionEnum.Accountant });
            EmployeeList.Add(new Employee()
             { Name = "Robert Johnson", Position = PositionEnum.Marketeer });
            EmployeeList.Add(new Employee() 
             { Name = "David Williams", Position = PositionEnum.Mechanic });
        }
    }

XAML

<Window x:Class="WpfApp6.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:core="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApp6"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" >
    <Window.Resources>
        <!--Create list of enumeration values-->
        <ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type Type="local:PositionEnum"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <DataGrid x:Name="MyDataGrid"
            AutoGenerateColumns="False"      
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            RowHeaderWidth="0" >
            <DataGrid.Columns>
                <DataGridTextColumn
                   Binding="{Binding Name}"
                   Header="Name" />
                <DataGridComboBoxColumn
                    Header="Order Status"
                    SelectedItemBinding="{Binding Position}"
                    ItemsSource="{Binding Source={StaticResource myEnum}}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

enter image description here

Myslíte, že budete potřebovat, aby se seznámili s MVVM vzor a použít jako základ pro stavbu těchto aplikací.

2021-11-19 12:22:47

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................