如何让数据网格的特定列的组合框时的AutoGenerateColumns =“真”(how to m

2019-07-04 06:10发布

我是新来MVVM。 我在我的项目使用WPF与MVVM。 所以我现在测试的东西之前,跳水到一个应用程序需要编写。

我的页面(EmpDetailsWindow.xaml)是这样的

<Grid>
    <DataGrid Name="dgEmployee" Grid.Row="0" AutoGenerateColumns="True" ItemsSource="{Binding EmployeeDataTable}" CanUserAddRows="True" CanUserDeleteRows="True" IsReadOnly="False"  />
    <Button x:Name="btnSubmit" Content="Submit" Command="{Binding SubmitCommand}" CommandParameter="sample param" HorizontalAlignment="Left" Margin="212,215,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>

和我的模型(EmpDetailsWindowViewModel)是如下

public class EmpDetailsWindowViewModel : INotifyPropertyChanged
    {
        public ICommand SubmitCommand { get; set; }
        public EmpDetailsWindowViewModel()
        {
            EmployeeDataTable = DataTableCreator.EmployeeDataTable();
            GenderDataTable = DataTableCreator.GenderDataTable();
            SubmitCommand = new SubmitCommand();
        }

        DataTable _employeeDataTable;
        public DataTable EmployeeDataTable
        {
            get { return _employeeDataTable;}
            set
            {
                _employeeDataTable = value;
                RaisePropertyChanged("EmployeeDataTable");
            }
        }

        DataTable _genderDataTable;
        public DataTable GenderDataTable
        {
            get { return _genderDataTable; }
            set
            {
                _genderDataTable = value;
                RaisePropertyChanged("GenderDataTable");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;


        public void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

数据网格绑定成功的数据表。 现在,我在数据网格列“性别”。 这应该是一个组合框和cobobox的项目源从视图模型的GenderDataTable了。 我怎样才能做到这一点?

Answer 1:

你可以像下面这样做

<DataGrid AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"/>

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "Gender")
    {
        var cb = new DataGridComboBoxColumn();
        cb.ItemsSource = (DataContext as MyVM).GenderDataTable;
        cb.SelectedValueBinding = new Binding("Gender");
        e.Column = cb;
    }        
}


Answer 2:

在Infragistics的xamDataGrid您可以通过在FieldLayoutInitialized事件写入适当的逻辑编程设定。

参见更多信息此链接:

http://help.infragistics.com/Help/NetAdvantage/WPF/2012.2/CLR4.0/html/xamComboEditor_Setting_the_xamComboEditor_as_an_Editor_of_a_Field_Programmatically.html



文章来源: how to make particular column of datagrid a combobox when AutoGenerateColumns=“True”
标签: wpf mvvm