如何将组合框选择添加到数据网格

时间:2019-06-19 16:23:09

标签: wpf combobox datagrid datagridcomboboxcolumn

我有一个绑定到我的ObservableCollection的数据网格。 每个列都与类wellenelement的属性绑定。 现在,我想将“艺术”列转换为组合框列,用户可以在其中选择3种不同的选项。 如何创建这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 个答案:

答案 0 :(得分:1)

如果每个项目都相同,则可以将集合添加到视图模型中,并将其作为资源添加到视图中。然后,您可以将资源设置为DataGridComboBoxColumn的itemssource。

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));
        }
    }
}