将新记录插入可观察集合,然后将值分配给组合框选定值不会显示



我在WPF应用程序中有一个ComboBox,我从查找表中填充它。要求说,如果用户已选择将新记录创建为数据类型,则组合框将显示文本";选择&";。该文本不在查找表中,所以我创建了一个伪记录,并将其插入到用于填充组合框的ObservableCollection中,如下所示:

var newTmpCert = new CertificationType()
{
ID = 0,
CertType = SELECT_DROPDOWN_STRING, //SELECT_DROPDOWN_STRING == "Select..."
Inactive = false
};
CertTypeList.Insert(0, newTmpCert);

CertTypeList的定义如下:

private ObservableCollection<CertificationType> certTypeList;
public ObservableCollection<CertificationType> CertTypeList 
{ 
get { return certTypeList; }
set
{
certTypeList = value;
RaisePropertyChanged();
}
}

我一直在努力完成的任务是制作ComboBox节目";选择"这是吗

Course new_record = new Course();
new_record.CertificationLevel = "Re-certification";
Course = new_record;
CertificationTypeID = 0;

组合框的XAML是这样的:

<ComboBox  Width="200"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding CertTypeList}"
DisplayMemberPath="CertType"
SelectedValuePath="ID"
SelectedValue="{Binding CertificationTypeID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

每次我测试应用程序并选择创建新的证书记录时,组合框总是空白的。所以,我想我应该尝试一些不同的方法,将CertificateTypeID分配给2(查找表中有第三条记录(,这非常有效。

为什么它有效?ObservableCollection应该引发一个属性更改事件。ComboBox未绑定到数据库中的查找表,而是绑定到ObservableCollection。如果我在查找表中指定了一个现有记录,为什么它能工作,但如果我在视图模型中将0分配给CertificateTypeID,它就不工作?

如果您对HappyNomad解决方案感到满意,我认为这只是一个绑定问题。是否已检查"输出"窗口中是否有来自XAML的任何错误消息(运行程序时(。我用这个解决方案做了一个例子,ContentControl XAML看起来像这样:

<ContentControl Content="{Binding}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="cb" Width="200" HorizontalAlignment="Left"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding CertTypeList}"
DisplayMemberPath="CertType"
SelectedValuePath="ID"
SelectedValue="{Binding CertificationTypeID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock x:Name="tb" Text="Select..." IsHitTestVisible="False" Visibility="Collapsed"/>
</Grid>
<DataTemplate.Triggers>
<Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
<Setter TargetName="tb" Property="Visibility" Value="Visible"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>

相关内容

  • 没有找到相关文章

最新更新