【发布时间】:2018-04-07 13:13:51
【问题描述】:
我有以下问题:
当我的视图加载组合框时,选择的值为空。
这是我的观点的代码:
<UserControl.Resources>
...
<CollectionViewSource x:Key="SpecialtiesSource" Source="{Binding Path=Specialties}" />
...
</UserControl.Resources>
...
<ComboBox Grid.Row="11" Grid.Column="2" Name="Specialty" Style="{StaticResource ComboBoxItem}"
SelectedIndex="0"
IsEditable="True"
TextSearch.TextPath="Name"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource SpecialtiesSource}}"
SelectedItem="{Binding SelectedSpecialty}"
SelectedValuePath="Name">
</ComboBox>
这是我的视图模型:
private List<Specialty> _specialties;
public List<Specialty> Specialties
{
get
{
return _specialties;
}
set
{
_specialties = value;
NotifyOfPropertyChange(() => Specialties);
}
}
private Specialty _selectedSpecialty;
public Specialty SelectedSpecialty
{
get
{
return _selectedSpecialty;
}
set
{
if (value == null)
{
return;
}
_selectedSpecialty = value;
NotifyOfPropertyChange(() => SelectedSpecialty);
}
}
型号:
public class Specialty : IGeneric
{
public string Code { get; set; }
public string Name { get; set; }
public string TabColour { get; set; }
public string TextColour { get; set; }
public bool? ActiveFlag { get; set; }
}
public interface IGeneric
{
string Name { get; set; }
}
当我调试代码时,我可以看到我的 Specialties 对象返回了正确的结果,因为当我点击下拉菜单时,我可以看到我所期望的所有结果。
然而,在它加载这个对象之后,我可以看到我的 SelectedSpecialty 对象被击中,该对象为空。我猜这是因为加载 ItemsSource 和尝试在索引位置 0 处设置 SelectedItem 的值之间的一些潜在交互?
关于如何弄清楚为什么要设置 SelectedItem 以及如何正确停止/将其设置为我的 SpecialtiesSource 的第一项的任何输入或建议?
我也不是 100% 有信心正确使用 SelectedValuePath。
【问题讨论】:
-
只是想确保我理解。加载后您可以看到 CombBox 中的项目,但 SelectedItem 没有绑定?因此,如果您更改了选择,您的 SelectedSpecialty 仍然为空?
-
删除 selectedvaluepath 行。 SelectedSpeciality 最初是如何设置的?您期望它不为空,因此某些内容显示为已选中。但是我没有看到任何代码可以将其设置为任何内容。所以它将为空。
标签: c# wpf xaml caliburn.micro