【发布时间】:2018-01-18 18:13:00
【问题描述】:
我未能使用Combobox 的SelectedItem 属性。一项已正确绑定和显示,但不能更改为另一项。如果尝试选择其他项目,项目列表会正确关闭,但不会调用 SelectedItem(也不会调用 setter 或 getter),并且显示的选定项目不会更改。
我的 XAML 如下:
<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);的计算结果为true) - 之后不再调用这两个属性
我已经创建了一个分支,只需要我编写这个问题所需的最小更改:https://github.com/famoser/Bookmarked/compare/bug-failing-combobox
如果我将ComboBox 替换为ListView,则SelectedItem 设置正确。因此设置工作正常。
我是否需要为 ComboBox 设置其他属性才能使其正常工作,还是这是一个错误?
【问题讨论】:
-
你为什么在你的绑定中使用这个:Source={StaticResource Locator}?
-
我已经简化了代码并忘记删除它(我的
ViewModels 是Locator中的属性)。谢谢! -
我怀疑项目模板...如果删除 'ItemTemplate="{StaticResource PasswordTypeTemplate}"' 会起作用吗?