Колонка данных WPF не обновляется во время редактирования - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть сетка данных, в которой есть два столбца шаблона с использованием ComboBox. Второй из них должен быть заполнен в зависимости от первого. Вот урезанный пример моего класса:

public class Customer 
{
    public int ID { get;set; }
    // Other Fields
    public string DropdownValue1 { get;set; }
    public string DropdownValue2 { get;set; }
    public List<DropdownItem> Options1 { get;set; } // DropdownItem is another class of 3 strings called Text, Value and Group
    public List<DropdownItem> Options2 { get;set; }
    public List<DropdownItem> FilteredItems 
    {
        get { return Options2.Where(n => n.Group == DropdownValue1); }
    }
}

При получении данных и создании списка для этого класса, т.е. списка и его заполнении, я устанавливаю соответствующие параметры:

customer.ID = id;
DropdownValue1 = dropdown1;
DropdownValue2 = dropdown2;
Options1 = GetOptions1(); // i.e. returns List<DropdownItem> with manual populated items
Options2 = GetOptions2();

Элемент ItemsSource таблицы данных установлен в эту коллекцию, и затем сами столбцы записываются следующим образом:

<DataGridTemplateColumn Header="Dropdown 1" HeaderStyle="{StaticResource WrappedColumnHeaderStyle}">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock>
                                            <TextBlock.Text>
                                                <MultiBinding>
                                                    <MultiBinding.Converter>
                                                        <local:DropdownConverter />
                                                    </MultiBinding.Converter>
                                                    <Binding Path="DropdownValue1" />
                                                    <Binding Path="Options1" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <ComboBox SelectedValue="{Binding DropdownValue1}" SelectedValuePath="Value" DisplayMemberPath="Text" ItemsSource="{Binding Path=Options1}"></ComboBox>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>
                            <DataGridTemplateColumn Header="Dropdown 2" HeaderStyle="{StaticResource WrappedColumnHeaderStyle}">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock>
                                            <TextBlock.Text>
                                                <MultiBinding>
                                                    <MultiBinding.Converter>
                                                        <local:GroupDropdownConverter />
                                                    </MultiBinding.Converter>
                                                    <Binding Path="DropdownValue2" />
                                                    <Binding Path="Options2" />
                                                    <Binding Path="DropdownValue1" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <ComboBox SelectedValue="{Binding DropdownValue2}" SelectedValuePath="Value" DisplayMemberPath="Text" ItemsSource="{Binding Path=FilteredItems}"></ComboBox>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>

Все это работает нормально, за исключением случаев, когда изменяется первый столбец, вторая выпадающая ячейка или шаблон редактирования не обновляется с правильными значениями, пока полностью не выйдет из строки. Он обновляется, но не после редактирования отдельной ячейки.

Я добавил INotifyPropertyChanged в свой класс, т.е. класс Customer: INotifyPropertyChanged, и поместил OnPropertyChanged () в установщик для обоих свойств DropdownValue, но это не изменилось.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...