如何将WPF DataGridComboBoxColumn绑定到ViewModel属性?

时间:2015-08-29 15:37:36

标签: c# wpf mvvm datagrid

我的视图中有一个WPF DataGrid,我希望能够使用组合框编辑一列。这样做,我在我的viewmodel上创建了一个属性,如下所示:

public List<EnumeradorWCFModel> TiposCarga { get; set; }

使用WCF服务正确填充属性。现在这是我的DataGrid定义:

<DataGrid ItemsSource="{Binding Path=TarifarioSel.TarifariosDet}" 
              IsReadOnly="False" AutoGenerateColumns="False">
        <DataGrid.Columns>                
            <DataGridComboBoxColumn Width="200" Header="Tipo Carga" ItemsSource="{Binding Path=TiposCarga}" 
                SelectedValueBinding="{Binding Path=ID_TipoCarga}"  DisplayMemberPath="Descripcion" SelectedValuePath="ID"/>                
        </DataGrid.Columns>

我也试试这个,没有运气:

<DataGrid ItemsSource="{Binding Path=TarifarioSel.TarifariosDet}" 
              IsReadOnly="False" AutoGenerateColumns="False">
        <DataGrid.Columns>                
            <DataGridComboBoxColumn Width="200" Header="Tipo Carga" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}, Path=DataContext.TiposCarga}" 
                SelectedValueBinding="{Binding Path=ID_TipoCarga}"  DisplayMemberPath="Descripcion" SelectedValuePath="ID"/>                
        </DataGrid.Columns>

问题是如何将组合框列的ItemsSource属性绑定到viewmodel中的属性。

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:2)

确定。自己找,但不知道为什么必须这样做。如果有人需要,我会发布答案。

<DataGrid ItemsSource="{Binding Path=TarifarioSel.TarifariosDet}" 
              IsReadOnly="False" AutoGenerateColumns="False">
        <DataGrid.Columns>                                
            <DataGridComboBoxColumn Width="200" Header="Tipo Carga" 
                SelectedValueBinding="{Binding Path=ID_TipoCarga}"  DisplayMemberPath="Descripcion" SelectedValuePath="ID">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.TiposCarga}"/>
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.TiposCarga}"/>
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>