Как я могу добавить выбор Combobox в сетку данных - PullRequest
0 голосов
/ 19 июня 2019

У меня есть сетка данных, связанная с моей коллекцией ObservableCollection.Каждый столбец связан со свойством класса wellenelement.Теперь я хотел бы преобразовать колонку «Art» в колонку со списком, где пользователь может выбрать один из трех вариантов.Как я могу создать эти 3 элемента Combobox и добавить их в таблицу данных?

<DataGrid AutoGenerateColumns="True" Name="dataGrid1" ItemsSource="{Binding}"  >

</DataGrid>
```xaml

```c#
public partial class MainWindow : Window
    {
        public ObservableCollection<Wellenelement> Welle1;

        public MainWindow()
        {

            InitializeComponent();
            Welle1 = new ObservableCollection<Wellenelement>();
            dataGrid1.DataContext = Welle1;

        }
    }
```c#


```c#

public class Wellenelement      
{ 
        public string Art { get; set; }
        public string UK { get; set; }
        public string DA { get; set; }
        public string DI { get; set; }       
}

```c#

1 Ответ

1 голос
/ 19 июня 2019

Если это одинаково для каждого элемента, вы можете добавить коллекцию в модель представления и добавить ее в качестве ресурса для вашего представления.Затем вы можете установить ресурс в качестве источника элементов для DataGridComboBoxColumn.

ViewModel:

public class MainViewModel
{

    public MainViewModel()
    {
        Wellenelements = new ObservableCollection<Wellenelement>()
        {
            new Wellenelement()
            {
                UK = "uk1",
                DA = "da1",
                DI = "di1"
            },
            new Wellenelement()
            {
                UK = "uk2",
                DA = "da2",
                DI = "di2"
            },
        };

        ArtTypes = new List<string>()
        {
            "new art","old art", "good art","bad art"
        };
    }

    public ObservableCollection<Wellenelement> Wellenelements { get; set; }

    public List<string> ArtTypes { get; set; }
}

Представление:

<Window ...
        xmlns:viewmodels="clr-namespace:WpfApp.Viewmodels"
        ...>

    <Window.DataContext>
        <viewmodels:MainViewModel/>
    </Window.DataContext>

    <Window.Resources>
        <CollectionViewSource x:Key="myCollection" Source="{Binding ArtTypes}"/>
    </Window.Resources>

    <Grid>


        <DataGrid AutoGenerateColumns="False" 
                CanUserAddRows="False"
                ItemsSource="{Binding Wellenelements}" >
            <DataGrid.Columns>
                <DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource myCollection}}"
                                        SelectedItemBinding="{Binding Art, UpdateSourceTrigger=PropertyChanged}"
                                        Header="Art Combo column"/>
                <DataGridTextColumn Binding="{Binding Art}"
                                    IsReadOnly="True"
                                    Header="Selected Art Type"/>
                <DataGridTextColumn Binding="{Binding UK}"
                                    Header="UK"/>
                <DataGridTextColumn Binding="{Binding DA}"
                                    Header="DA"/>
                <DataGridTextColumn Binding="{Binding DI}"
                                    Header="DI"/>
            </DataGrid.Columns>

        </DataGrid>
    </Grid>
</Window>

Класс Wellenelement:

public class Wellenelement : ObservableObject
{
    public string UK { get; set; }
    public string DA { get; set; }
    public string DI { get; set; }


    private string _art;
    public string Art
    {
        get { return _art; }
        set
        {
            _art = value;
            OnPropertyChanged(nameof(Art));
        }
    }
}
...