我有一个ComboBox'cbSkillLevel',我正在绑定数据,如下所示填充列表。它工作正常。我有一个包含项目的列表框,根据项目选择我需要为'cbSkillLevel'设置不同的值。如何将组合框的值设置为我想要的值。
我试过的是吼叫。
非常感谢您的帮助。
<ComboBox Grid.Column="3" x:Name="cbSkillLevel" Margin="0,0,10,0" IsEnabled="{Binding ElementName=SkillsPage, Path=setIsEnabled, Mode=OneWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="26" Foreground="Black" Text="{Binding Value}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
List<Lookup> skillLevel = dbOperation.getLookupData("Skill_Level");
cbSkillLevel.ItemsSource = skillLevel;
private void lbSkills_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
clearFields();
clearTopicsForm();
var skillobj = (lbSkills.SelectedItem as Skill);
if (skillobj != null)
{
selected_SkillDescription = skillobj.SkillDescription;
tbNotes.Text = skillobj.Notes;
tbDescription.Text = selected_SkillDescription;
/*I TRIED THE BELLOW OPTION BUT DID NOT WORK.*/
//cbSkillLevel.SelectedItem = skillobj.SkillLevel;
//cbSkillLevel.SelectedIndex = cbSkillLevel.Items.IndexOf(skillobj.SkillLevel.ToString());
//cbSkillLevel.SelectedIndex = 1;
//cbSkillLevel.ItemsSource = tempListSkillLevel;
cbSkillLevel.SelectedValue = skillobj.SkillLevel.ToString();
cbSkillType.SelectedItem = skillobj.SkillType;
tbWarningWeeks.Text = skillobj.WarningWeeks.ToString();
dpValidFrom.Date = skillobj.ValidFrom;
dpValidUntil.Date = skillobj.ValidUntil;
/*load topics for this skill*/
loadTopicsFromDB(skillobj.SkillDescription);
//set the fields as read only
setIsEnabled = false;
addEditButton();
}
}
我虽然使用'cbSkillLevel.SelectedValue = skillobj.SkillLevel.ToString();'应该工作,但事实并非如此。我的猜测是因为绑定设置为值'Value'
<TextBlock FontSize="26" Foreground="Black" Text="{Binding Value}" />
设置我从Skill对象分配的值。我怎样才能设定价值 'cbSkillLevel.SelectedValue = skillobj.SkillLevel.ToString();'
class Skill
{
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int Id { get; set; }
public string SkillDescription { get; set; }
public string SkillType { get; set; }
public string SkillLevel { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime ValidUntil { get; set; }
public int WarningWeeks { get; set; }
public string Notes { get; set; }
}
class Lookup
{
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int LookupId { get; set; }
public string Type { get; set; }
public string Value { get; set; }
}
答案 0 :(得分:0)
SelectedItem可能无法正常工作。 您使用{Binding Value}不是问题所在,这只是对象的直观表示,与选择无关。你需要做的是告诉组合框的WHAT值是&#34; SelectedValue&#34;在那个对象上。这是在XAML中完成的,并建议使用Value,因为接缝是你的对象的联合(?)
<ComboBox SelectedValuePath="Value" ...
然后这应该有效:
cbSkillLevel.SelectedValue = skillobj.SkillLevel.Value;
答案 1 :(得分:0)
ItemSource是一个查找列表,因此设置&#34;选择&#34;的唯一方法是也必须是Lookup类型。
cbSkillLevel.SelectedValue = skillobj.SkillLevel.ToString();
只有在您已经使用
建立了ItemSource时,这才有效IEnumerable<string>
ComoboBox是一个ItemsControl。您可以在此处查看详细信息https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol(v=vs.110).aspx
答案 2 :(得分:0)
将DisplayMemberPath和SelectedValuePath添加到您的xaml绑定中,DisplayMemberPath是应该向用户显示对象的属性,SelectedValuePath是它在内部选择的属性,所以它就像这样,例如,如果我想将我的fruits集合绑定到combobox,我想显示水果名称,但选择其ID,以便我的属性
DisplayMemberPath = "FruitName"
SelectedValuePath = "FruitId"
稍后在您的selectionchanged事件中,您可以使用cbSkillLevel.SelectedValue设置其值。在我们的示例中,它将是fruit ID,因为我们将它绑定为SelectedValuePath。