2013-06-09 6 views
4

바인딩 나는이 테이블을 가지고있다.은 작성과 두 개의 콤보 상자 WPF Caliburn.micro

enter image description here

나는이하고 싶으면 : 콤보 상자 그룹에 테이블 그룹의 모든 설명이 있고, 내가 (첫 번째 콤보 상자의)이 설명의 항목을 선택하면 두 번째 콤보 상자는 설명의 채운다 을 이전에 내가 선택한 그 설명에만 관련이 있습니다.

XAML NewItemView :

몇 가지 코드 GROUP 클래스입니다

[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; 
    } 
} 

: I가 원하는

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

처럼

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

뷰 모델 코드는 th를 지정하다 나는 Caliburn.Micro와 Dapper를 사용하여 accesquery에 사용합니다.

정말 고마워요!

+1

목표를 달성하려는 방법에 대해 몇 가지 코드를 제공 할 수 있습니까? 아니면 목표 달성 방법을 잃어 버렸습니까? – Greg

+1

질문을 업데이트합니다! – puti26

답변

2

이것은 일반적인 마스터/세부 시나리오이며이를 해결할 수있는 대표적인 방법이 있습니다. 대신 당신의 GetGroups 방법 내부 string[]로만 로딩 설명의

I.는 enitre Group 객체를로드하거나이있는 경우 많은 속성을 다음과 같이 뭔가를 단지 두 필요한 특성을 가진 뷰 모델을 만들 :

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

II. NewItemViewModel에서 두 번째 콤보 상자의 속성을 추가,의는

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 활용하고 데이터를로드하는 다른 기술을 사용하여 조금 향상시킬 수 있다고 생각합니다.