这真让我抓狂。我有一个DataGrid,它具有一个DataGridComboBoxColumn,我希望用户能够使用它来进行选择。这是我的网格的基本轮廓。
<DataGrid ItemsSource="{Binding GoalList}" DockPanel.Dock="Bottom" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn ItemsSource="{Binding LifeAreaList}" Header="Life Area"/>
<DataGrid.Columns>
</DataGrid>
DataGrid绑定(bind)到Goal类型的对象的集合。每个目标都有一个LifeArea类型的属性。每个LifeArea具有属性LifeAreaId和Name。
数据上下文包含一个可观察到的“目标:GoalList”集合和一个“生命领域”列表:“LifeAreaList”。我希望用户能够为目标选择其他生活区域。生活区域的名称也必须是显示值。
编辑
解决方案是必须将DataGridComboBoxColumn的ItemsSource设置为静态资源。另一种选择是通过代码设置ItemsSource。
最后我有:
<DataGridComboBoxColumn x:Name="_lifeAreaComboBoxColumn" SelectedItemBinding="{Binding LifeArea}" DisplayMemberPath="Name" Header="Life Area">
在后面的代码中,我设置了ItemsSource:
_lifeAreaComboBoxColumn.ItemsSource = LifeAreaDAL.GetLifeAreas();
如果有机会,我会将其转换为StaticResource。
最佳答案
您需要执行以下操作(不要开枪):
<DataGridComboBoxColumn Header="Life Area" SelectedItemBinding="{Binding SelectedLifeArea}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
关于wpf - 如何使用MVVM将数据绑定(bind)到DataGrid中的DataGridComboBoxColumn,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3563325/