Zmuro Ответов: 1

Wpf datagrid с combobox


У меня есть проблема с DataGrid, привязанной к ObservableCollection, где каждый столбец является ComboBox. Первый ComboBox имеет ItemsSource, привязанный к ObjectDataProvider. Другие ComboBoxes заполняются элементами в зависимости от SelectedItem в первом ComboBox. Я использую DataGridTemplateColumn\DataTemplate\ComboBox... Проблема в том, что когда я выбираю элемент из первого ComboBox, SelectedItem не задается, потому что в коллекции, к которой привязана DataGrid, не существует элементов. DataGrid должен создать новую строку (добавить объект в коллекцию), как только я начну выбирать элемент из первого выпадающего списка. Я не могу добавить новую строку.

<DataGrid DockPanel.Dock="Top" ItemsSource="{Binding Path=Routes, Mode=TwoWay}"                  
                    AutoGenerateColumns="False"                                            
                    CanUserDeleteRows="True"
                    CanUserAddRows="True"    
                    IsSynchronizedWithCurrentItem="True"                    
                    GridLinesVisibility="All" 
                  >
            <DataGrid.Resources>                
                <ObjectDataProvider x:Key="Modules" ObjectType="{x:Type serv:PortPinDataService}" MethodName="GetModules"/>
            </DataGrid.Resources>
            <DataGrid.Columns>

                <DataGridTemplateColumn Header="Module" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Source={StaticResource Modules}}"
                                      DisplayMemberPath="Name"
                                      SelectedItem="{Binding Path=CurrentModule, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">                                
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>                    
                </DataGridTemplateColumn>
                
                <DataGridComboBoxColumn Header="Module" ItemsSource="{Binding Source={StaticResource Modules}}"
                                        SelectedItemBinding="{Binding Path=CurrentModule, UpdateSourceTrigger=PropertyChanged}"
                                        Width="80"    
                                        DisplayMemberPath="Name"
                                        >
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">                            
                            <Setter Property="Width" Value="80"/>
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
                </DataGridComboBoxColumn>                

                <DataGridTemplateColumn Header="Signal" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Path=SignalsByModule}" DisplayMemberPath="SignalName" SelectedItem="{Binding Path=CurrentSignalRegister, UpdateSourceTrigger=PropertyChanged}"></ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="Route to" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Path=Registers}" DisplayMemberPath="RegRouteInfo"></ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>


Итак, мой вопрос заключается в том, почему новый объект не добавляется в коллекцию DataGrid при использовании DataGridTemplateColumn?

Что я уже пробовал:

Если я изменю первый столбец на DataGridComboBoxColumn, то новый элемент будет добавлен в коллекцию, как только я начну выбирать элемент и будет установлен SelectedItem.

1 Ответов

Рейтинг:
0

Zmuro

Я по-прежнему возникают те же проблемы. Коллекция маршрутов, привязанная к DataGrid ItemsSource, изначально пуста и должна быть заполнена объектами маршрутов через DataGrid путем выбора значений из ComboBoxes. Я подключил событие CollectionChanged к маршрутам и не получаю это событие, если выбираю значение из fist ComboBox, поэтому я знаю, что объект маршрута еще не был создан, и я не могу привязать SelectedItem к CurrentModule, который является свойством в объекте маршрута. SignalsByModule и регистры также являются свойством коллекции в объекте Route.

Должен ли я выбрать другой подход? Должен ли я переместить все коллекции, которые ComboBoxes привязаны к ViewModel?