我在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
答案 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
属性直接绑定到视图模型的属性。