Поле со списком UWP внутри поворотного элемента управления теряет выбранный элемент при тестировании с использованием симулятора или устройства Surface Pro.

На работе у нас есть приложение UWP, которое сделано с использованием фреймворка Galasoft MVVM.

На одном из экранов приложения есть список "Оборудование", на котором есть кнопка для изменения этого конкретного оборудования. При нажатии на эту кнопку пользователь переходит на другую страницу, которая имеет элемент управления с 4 вкладками. Источником элемента этого сводного элемента управления является коллекция Views.

Некоторые из этих вкладок также содержат комбинированные списки со списком пар ключ-значение и привязанным к ним свойством выбранного элемента.

Недавно пользователь сообщил о проблеме, заключающейся в том, что в первом раскрывающемся списке (поле со списком) на одной из этих вкладок отсутствует выбранный элемент, хотя он должен иметь.

Мы начали тестирование сценария, и, кажется, все работает хорошо, пока я не начну тестировать с использованием симулятора UWP, представленного в Visual Studio Professional 2017 (15.7.1), который действительно раздражает благодаря BSOD каждые 10 минут использования.

Во всяком случае, при использовании симулятора с "Режимом мыши" в качестве выбранного режима взаимодействия, я получаю проблему. После отладки я заметил дополнительный вызов из внешнего кода установщику свойства в ViewModel, который связан со свойством selected item указанного комбо-бокса с нулевым значением (возможно, это проблема).

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

Как ни странно, когда я взаимодействую с приложением в "Базовом сенсорном режиме", проблема, похоже, исчезает. Нет никаких вызовов к сеттеру из внешнего кода вообще.

Поэтому после этого я начинаю думать, что проблема связана с некоторой ошибкой в ​​сценариях многомодового взаимодействия. Наземное устройство имеет клавиатуру, к которой подключен тачпад. Я попросил пользователя повторно протестировать сценарий после отключения клавиатуры, я обновлю вопрос после того, как он ответит.

Обновление: проблема сохраняется на поверхности устройства даже после отсоединения сенсорной панели.

Так что здесь я открыт для идей, предлагая, что может быть причиной проблемы и возможного решения.

Ниже приведен пример с жестко закодированными значениями, который ведет себя так же.

XAML:

<ComboBox x:Name="IntervTypeComboBox" DisplayMemberPath="Label" <code></code> SelectedValuePath="Code"
                      Style="{StaticResource ComboStyle}"
                      ItemsSource="{Binding XYZ, Mode=TwoWay}"
                      ItemContainerStyle="{StaticResource ComboItemStyle}"
                      SelectedItem="{Binding SelectedXYZ, Mode=TwoWay}">
                <ComboBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Vertical" Width="{Binding ActualWidth, ElementName=IntervTypeComboBox}"/>
                    </ItemsPanelTemplate>
                </ComboBox.ItemsPanel>
            </ComboBox>

C#:

public ObservableCollection<KeyValueModel> XYZ
    {
        get
        {
            return _xyz;
        }
        set
        {
            if (Set(() => XYZ, ref _xyz, value))
            {
                SelectedXYZ = XYZ.First();
            }
        }
    }

    public KeyValueModel SelectedXYZ
    {
        get { return _selectedXYZ; }
        set
        {
            Set(() => SelectedXYZ, ref _selectedXYZ, value);
        }
    }

    private void Constructor()
    {
            XYZ = new ObservableCollection<KeyValueModel> {
            new KeyValueModel { Code="Default", Label="-- Sélectionner --"},
            new KeyValueModel { Code="ABC", Label="ABC"},
            new KeyValueModel { Code="DEF", Label="DEF"},
            new KeyValueModel { Code="GHI", Label="GHI"}
            };
        SelectedXYZ = XYZ.FirstOrDefault(x => x.Code == "DEF");
}

Я попытался поставить нулевую проверку значения перед выполнением установки свойства Selected item, не сработало. Я попытался изменить способ привязки элемента-источника с двухстороннего на одноразовый, тоже не сработало. Затем я попытался изменить режим привязки выбранного элемента с двухстороннего на один и использовать событие изменения выбора для обновления свойства модели представления, это плохая практика и не имеет значения.

0 ответов

Другие вопросы по тегам