使用wpf datagridview显示Combobox Items作为对象列表中对象的属性

时间:2017-10-24 06:17:06

标签: c# wpf mvvm datagridview

我在Model.cs中有一个类,这个类的对象列表是在viewmodel.cs中创建的。 我将这些对象的列表用作Data Gridview的Itemsource。列表中的每个对象都有Name作为属性,我想在DataGridComboBoxColumn的每个combox中列出这些名称。我尝试了很多东西,但我无法得到理想的结果。我在这个应用程序中使用Prism

我在ViewModel.cs中有以下代码

    private IList<BeamData> _allBeams

    public IList<BeamData> AllBeams
    {
        get { return _allBeams; }
        set { _allBeams = value; }
    }


    public LoadInfoViewModel()
    {
         _allBeams = new List<BeamData>()
        {
            new BeamData(){Name ="B1"},
            new BeamData(){Name ="B2"},
            new BeamData(){Name ="B3"}
        };
    }
}

梁数据类如下所示:

    public BeamData()
    {

    }
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }       

我的XAML文件包含此代码

    <DataGrid x:Name="Table" ItemsSource="{Binding AllBeams, UpdateSourceTrigger=Explicit}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridComboBoxColumn ItemsSource="{Binding AllBeams}"
                                DisplayMemberPath="Name">
            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>

Fyi,This没有回答我的问题。

期望的输出: 如果您查看上面的代码,B1, B2, B3是对象BeamData的名称(属性),列中的每个组合框都应具有所有名称Viz,B1 , B2, B3

1 个答案:

答案 0 :(得分:0)

ItemsSource的{​​{1}}和ElementStyle中设置EditingElementStyle

DataGridComboBoxColumn

<DataGrid x:Name="Table" ItemsSource="{Binding AllBeams, UpdateSourceTrigger=Explicit}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridComboBoxColumn DisplayMemberPath="Name"> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="{x:Type ComboBox}"> <Setter Property="ItemsSource" Value="{Binding Path=DataContext.AllBeams, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> </Style> </DataGridComboBoxColumn.ElementStyle> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="{x:Type ComboBox}"> <Setter Property="ItemsSource" Value="{Binding Path=DataContext.AllBeams, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn> </DataGrid.Columns> </DataGrid> 不是继承DataGridComboBoxColumn的可视元素,因此您无法将其DataContext属性直接绑定到视图模型的属性。