0

私はすでに ListCollectionView を "ListCollectionView1" として Grid に指定しており、inGrid では DataGrid を使用しています。「ListCollectionView1」には両方の監視可能なコレクションが含まれています。「ObservableCollection1」の DataGrid と、「ObservableCollection1」の監視可能なコレクションにある「ObservableCollection2」としての別の監視可能なコレクションを、DataGridComboBoxColumn の Itemsource として使用します。SelectedValueBinding として、「ObservableCollection1」の「a」としてプロパティを使用していますが、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)); }
        }
4

1 に答える 1

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にデータを入力する方法がわかりません。

于 2012-09-06T22:52:26.620 に答える