DatagridComboBoxColumn

DatagridComboBoxColumn

这真让我抓狂。我有一个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/

10-10 00:16