设置组合框的selectedValue

时间:2015-11-01 01:02:09

标签: c# wpf xaml data-binding combobox

我有一个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; }
}

3 个答案:

答案 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。