2013-06-09 3 views
4

У меня есть эта таблица:Заполнение и связывание два COMBOBOX WPF Caliburn.micro

enter image description here

я использую в моем проекте это мнение Вызывается NewItem и с этой точки зрения есть два ComboBox.

enter image description here

Я хотел бы сделать это: , что в выпадающем списке Group есть все описание таблицы GROUP, и когда я выбираю пункт этого описания (первый выпадающий список) вторые выпадающий заполняют описания относящихся только к тому описанию, которое я выбрал раньше.

Это код:

XAML NewItemView:

<ComboBox Height="21" HorizontalAlignment="Left" Margin="89,99,0,0" 
        VerticalAlignment="Top" Width="106" x:Name="Group" SelectedItem="{Binding SelectedGroup}" /> 

Код ViewModel, как:

[Export(typeof(IScreen))] 
public class NewItemViewModel : Screen 
{ 
    public string SelectedGroup { get; set; } 
    public String[] Group { get { return Groups; } } 

    [..] 


    //Constructor   
    public NewArticleViewModel() 
    { 
     Groups = GetGroups(); 
    } 


    //Method 
    private string[] GetGroups() 
    { 
    OleDbConnection conn = new OleDbConnection(StringConn); 
    List<Group> groups = new List<Group>(); 

    conn.Open(); 
    groups = conn.Query<Group>(Q_SELECT_GROUPS,null,null).ToList(); 
    conn.Close(); 

    string[] array = new string[groups.Count]; 

    for (int i = 0; i < array.Length; i++) 
    { 
     array[i] = groups[i].Descripion; 
    } 

    return array; 
    } 
} 

ГРУППА КЛАСС:

public class Group 
{ 
    public int Id { get; set; } 
    public string Descripion { get; set; } 
} 

Я хотел указать я использую Caliburn.Micro и Dapper для доступа.

Большое вам спасибо!

+1

Можете ли вы предоставить какой-то код о том, как вы пытались выполнить, или вы потеряли, как достичь цели? – Greg

+1

Я обновляю свой вопрос! – puti26

ответ

2

Это типичный сценарий «Мастер/Деталь», и есть типичный и простой способ его решения.

I. Вместо только описания нагрузки как string[] внутри вашего метода GetGroups, загрузите enitre Group объект или, если есть много свойств создать модель представления только с двумя нужными свойствами, что-то вроде этого:

class GroupViewModel { 
    public int GroupId {get; set;} 
    public string Description {get; set;} 
} 

II. В NewItemViewModel добавить свойство для второго ComboBox, скажем

class NewItemViewModel { 
    private ObservableCollection<SubgroupViewModel> _subgroups; 
    public ObservableCollection<SubgroupViewModel> Subgroups 
    { 
     get { 
      if (_subgroups == null) 
       _subgroups = new ObservableCollection<SubgroupViewModel>(); 
      return _subgroups; 
     } 
     set { 
      _subgroups = value; 
      NotifyPropertyChanged("Subgroups"); 
     } 
    } 
} 

III. Теперь в вашем NewItemViewModel, свойства становятся чем-то вроде этого:

class NewItemViewModel { 
    public GroupViewModel SelectedGroup 
    { 
     set { 
      var currentlySelected = value; 
      // LOAD ALL RELATED Subgroup Descriptions FOR currentlySelected.GroupId; 
      Subgroups = // LOADED Subgroup DESCRIPTIONS 
     } 
    } 
    public ObservableCollection<GroupViewModel> Group { get { return Groups; } } 
} 

Я надеюсь, что вы получите идею, это основная схема метода. Я думаю, вы можете немного улучшить его, используя некоторые из Selectors Important Properties и используя другие методы для загрузки данных.

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