UWP ComboBox SelectedItem在弹出窗口中未按预期绑定

时间:2017-09-06 11:42:46

标签: uwp uwp-xaml

我无法使用SelectedItem的{​​{1}}属性。项目已正确绑定并显示,但无法更改为其他项目。如果尝试选择其他项目,则项目列表会正确关闭,但不会调用Combobox(也不会设置setter或getter),并且不会更改显示的所选项目。

我的XAML如下:

SelectedItem

相关的<ComboBox ItemsSource="{Binding PasswordTypes}" ItemTemplate="{StaticResource PasswordTypeTemplate}" SelectedItem="{Binding SelectedPasswordType, Mode=TwoWay}" /> 代码:

ViewModel

调用两个属性如下:

  1. public MyViewModel() { //these are the only two assignments in code of those two properties _passwordTypes = new ObservableCollection<PasswordType>(nonEmptyList); _selectedPasswordType = PasswordTypes.First(); } private PasswordType _selectedPasswordType; public PasswordType SelectedPasswordType { get => _selectedPasswordType; set => Set(ref _selectedPasswordType, value); } private ObservableCollection<PasswordType> _passwordTypes; public ObservableCollection<PasswordType> PasswordTypes { get => _passwordTypes; set => Set(ref _passwordTypes, value); } 来自get PasswordTypes
  2. this.InitializeComponent()来自get SelectedPasswordType
  3. this.InitializeComponent()来自set SelectedPasswordTypethis.InitializeComponent()
  4. null源自set SelectedPasswordTypethis.InitializeComponent()的实例(PasswordType评估为_passwordTypes.Contains(value);
  5. 之后不再对这两个属性进行调用
  6. 这就是我所看到的: ComboBox behaviour

    我创建了一个分支,其中包含了编写此问题所需的最小更改:https://github.com/famoser/Bookmarked/compare/bug-failing-combobox

    如果我将true替换为ComboBox,则ListView设置正确。因此,设置正常。

    我是否需要为SelectedItem设置其他属性才能生效,或者这是一个错误?

1 个答案:

答案 0 :(得分:6)

它不起作用的原因是因为ComboBox从未获得焦点,因此SelectionChanged事件永远不会被触发。

此行为是从Windows 10 build 14393 开始设计的。修复很简单 - 您只需在AppBarButton上手动启用专注于互动

14393 中引入了一个名为AllowFocusOnInteraction的新属性。因此,如果您定位 14393 以及稍后,则只需将其设置为false即可。

如果您在此之前定位任何内容,则需要在Loaded的{​​{1}}事件中执行以下操作。

AppBarButton

要详细了解此行为,请参阅Rob Caplan的优秀帖子"ComboBox on a Flyout attached to an AppBarButton loses mouse input on 1607"