我无法使用SelectedItem
的{{1}}属性。项目已正确绑定并显示,但无法更改为其他项目。如果尝试选择其他项目,则项目列表会正确关闭,但不会调用Combobox
(也不会设置setter或getter),并且不会更改显示的所选项目。
我的XAML如下:
SelectedItem
相关的<ComboBox
ItemsSource="{Binding PasswordTypes}"
ItemTemplate="{StaticResource PasswordTypeTemplate}"
SelectedItem="{Binding SelectedPasswordType, Mode=TwoWay}"
/>
代码:
ViewModel
调用两个属性如下:
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
this.InitializeComponent()
来自get SelectedPasswordType
this.InitializeComponent()
来自set SelectedPasswordType
至this.InitializeComponent()
null
源自set SelectedPasswordType
到this.InitializeComponent()
的实例(PasswordType
评估为_passwordTypes.Contains(value);
)我创建了一个分支,其中包含了编写此问题所需的最小更改:https://github.com/famoser/Bookmarked/compare/bug-failing-combobox
如果我将true
替换为ComboBox
,则ListView
设置正确。因此,设置正常。
我是否需要为SelectedItem
设置其他属性才能生效,或者这是一个错误?
答案 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"。