如何在DataGrid中的DataGridComboBoxColumn中绑定ObservableCollection?

时间:2012-09-06 09:16:16

标签: wpf xaml data-binding

我已经将ListCollectionView作为" ListCollectionView1"到Grid和inGrid我使用过DataGrid。 " ListCollectionView1"包含两个可观察的集合。 " ObservableCollection1" DataGrid和另一个可观察的集合为" ObservableCollection2"在" ObservableCollection1"可观察集合作为Dataource到DataGridComboBoxColumn。 而作为SelectedValueBinding,我使用Property作为" a"来自" ObservableCollection1" 但是我没有在DataGridComboBoxColumn中获取值

 <Grid DockPanel.Dock="Bottom" DataContext="{Binding ListCollectionView1>
<DataGrid 
                                ColumnWidth="130"
                                CanUserAddRows="True"
                                AutoGenerateColumns="False"
                                ItemContainerStyle="{StaticResource DataGridRowContentStyle}"
                                ItemsSource="{Binding ObservableCollection1 }" 
                                CanUserDeleteRows="False">
                        <DataGridComboBoxColumn Header="Labour" ItemsSource="{Binding Path=ObservableCollection2 , RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"  SelectedValueBinding="{Binding Id}" SelectedValuePath="Id" DisplayMemberPath="Id" HeaderStyle="{StaticResource DataGridHeaderStyle}"/>
</DataGrid>
</Grid>

在我的viewModel可观察集合和listcollectionview中

private ListCollectionView _ListCollectionView1;
        public ListCollectionView ListCollectionView1
        {
            get { return _ListCollectionView1; }
            set
            {
                this._ListCollectionView1= value;
                OnPropertyChanged("ListCollectionView1");
            }
        }

public ObservableCollection<Model_ObservableCollection1> ModelObservableCollection1
        {
            get { return new ObservableCollection<Model_ObservableCollection1>(ViewModel.AllDataCollactions.AllTransactionsDetails.Where(s => s.TransactionsID.Equals(TransactionsID))); }
        }
        public ObservableCollection<Model_ObservableCollection2> Model_ObservableCollection1
        {
            get { return new ObservableCollection<Model_ObservableCollection1>(ViewModel.AllDataCollactions.AllTransactionsDetails.Where(s => s.TransactionsID.Equals(TransactionsID) && s.IsJama)); }
        }

1 个答案:

答案 0 :(得分:1)

试试这个。

 <DataGrid x:Name="testGrid" AutoGenerateColumns="True" ItemsSource="{Binding ObservableCollection}" >
        <DataGrid.Columns>
            <DataGridComboBoxColumn Header="Labour"  DisplayMemberPath="test">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.ObservableCollection2 , RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.ObservableCollection2, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>

在样式绑定中添加 DataContext ,而不仅仅是属性名称。您只是设置ColumnBoxHeader的ItemsSource,这是没有意义的。它不知道如何填充ComboBox在控件子项中的位置。