我有以下问题:
当我的视图加载时,组合框选择的值为空。
以下是我的观点代码:
<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对象被命中为null。我猜这是因为加载ItemsSource之间的某些底层交互,然后尝试在索引位置0设置SelectedItem的值?
关于如何确定为什么设置SelectedItem以及如何正确停止/设置我的SpecialtiesSource的第一项的任何输入或建议?
我也没有100%自信我正确使用了SelectedValuePath。
答案 0 :(得分:0)
绑定的SelectedItem从null开始。与ItemsSource相同。如果您看到列表,则必须在问题中未显示的地方初始化Specialties,只需在此之后设置SelectedSpecialty。
或者,如果它是在运行时加载的静态列表,则在get for Specialties中创建列表。然后,您可以在运行时将SelectedSpecialty初始化为Specialties项目之一。