2015-11-01 2 views
0

У меня есть ComboBox 'cbSkillLevel', к которому я привязываю данные, как показано ниже, чтобы заполнить список. Он работает нормально. У меня есть список с элементами, основанный на выборе элементов. Мне нужно установить другое значение в «cbSkillLevel». Как установить значение combobox в значение, которое я хочу.set selectedValue combobox

То, что я пробовал, это ревет.

Ваша помощь очень ценится.

<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}" /> 

И при установке значения я назначаю от навыка объекта. Как установить значение '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

SelectedItem probobly не работает, так как объекты отличаются физическими объектами, созданными в отдельных списках. То, что вы использовали {Binding Value}, не является проблемой, это только визуальное представление ваших объектов и не имеет никакого отношения к выбору. То, что вам нужно сделать, это указать значение WHAT, которое является «SelectedValue» для этого объекта. что делается в XAML и suggestly к стоимости, так что швы быть UNICE ваших объектов

<ComboBox SelectedValuePath="Value" ... 

Тогда это должно работать (?):

cbSkillLevel.SelectedValue = skillobj.SkillLevel.Value; 
+0

Привет «Значение» не является уникальным для обоих объектов, в объекте Lookup его «Value», а в Skill - «SkillLevel». вот почему я не уверен, как это сделать. – BRDroid

+0

Хм, LookupId - это идентификатор? Что бы то ни было, они могут включать или создавать новое свойство, если это необходимо (могут состоять из данных других объектов, только для чтения). И используйте это вместо «Значение» в моих двух фрагментах кода. – ceciliaSHARP

+0

между ними нет ключей, и я не могу добавить какое-либо свойство, так как это будет структура таблицы. – BRDroid

0

ItemSource является Списком Lookup, так единственный способ установить «выбранный» также должен быть типа 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

+0

В рамках выбранного изменения я взял еще один список, который относится к типу Lookup (одно поле со списком) и добавило поле «Значение» от skillObj. и затем я попытался установить выбранное значение, но все еще не работает. что-то вроде этого Список tempListSkillLevel = новый Список (); tempListSkillLevel.Add (новый поиск {Value = skillobj.SkillLevel}); затем cbSkillLevel.SelectedValue = tempListSkillLevel [0]; , но всегда выбранное значение отображается как нуль. – BRDroid

0

Добавить DisplayMemberPath и SelectedValuePath своего XAML привязки что DisplayMemberPath является то, что свойство объекта должно быть показано пользователю и SelectedValuePath является то, что свойство выбирает внутренне так его, как это, например, если я хочу связать свою коллекцию фруктов в выпадающий список, я хотел бы отображаемое имя фрукты, но выбрать его идентификатор, так что мои свойства будут

DisplayMemberPath = "FruitName" 
SelectedValuePath = "FruitId" 

И позже в вашем SelectionChanged случая, вы можете установить его значение с cbSkillLevel.SelectedValue. В нашем примере это будет идентификатор плода, поскольку мы связали его как SelectedValuePath.

+0

В рамках выбранного изменения я взял другой список, который имеет тип Lookup (один из которых вызывается combobox) и добавил поле «Значение» из skillObj. и затем я попытался установить выбранное значение, но все еще не работает. что-то вроде этого списка tempListSkillLevel = новый Список (); tempListSkillLevel.Add (новый Lookup {Value = skillobj.SkillLevel}); затем cbSkillLevel.SelectedValue = tempListSkillLevel [0]; но всегда выбранное значение показано как null – BRDroid

+0

Привет в вашем примере FruiName и FruitId имеют одинаковые объекты? в моем случае itemSource объекта Lookup и selectedValue, который я пытаюсь установить, относится к другому объекту SKill. Есть идеи? – BRDroid

Смежные вопросы