2011-09-08 2 views
2

wpf 폼에 10 개의 콤보 상자 배열을 원합니다.고정 된 수의 콤보 상자에 대한 XAML 컨트롤 배열

콤보 상자의 ItemsSource는 선택 가능한 Items의 ObservableCollection과 동일합니다.

각 선택 항목은 상상 'selectedItems를'..

배열을 할 수있는 가장 좋은 방법은 무엇이라고, 다른 ObservableCollection에의 항목에 바인딩 할 것인가? 물론 10 개의 개별 콤보 상자가있을 수 있지만 매우 우아하지는 않습니다.

콤보 상자 수가 고정되어있어 ItemsControl 템플릿이 나이라고 생각하지 않습니다. 효과적으로 결합을하고 있음을 감안할 때, 상상력 'selectedItems를'이라는

감사

답변

3

, 당신은 (나는 그런 ItemsSource 등의 일반적인 속성을 설정하는 콤보 상자에 대한 공통의 스타일을 만들 수, 10 개 같은 항목 목록 선택 상자,하지만 서로 다른 데이터 소스이 경우

이 바인딩이 모든 항목에 대해 동일하면 SelectedItem) 실제로 필요하면 양식에 개별 ComboBox를 만듭니다. 당신의 선택 상자의 데이터 소스가 콜렉션에 넣을 수있는 경우

<StackPanel> 
    <StackPanel.Resources> 
     <Style TargetType="{x:Type ComboBox}"> 
      <!-- Set the binding to wherever your ItemsSource resides. In this 
       case,I'm binding to a static class called Lists and a static 
       property called ComboBoxItems --> 
      <Setter Property="ItemsSource" 
        Value="{Binding Source={x:Static local:Lists.ComboBoxItems}}" /> 

      <!-- Only use this setter if your binding is the same everywhere --> 
      <Setter Property="SelectedItem" Value="{Binding SelectedItem}" /> 
     </Style> 
    </StackPanel.Resources> 

    <ComboBox DataContext="{Binding Item1}" /> 
    <ComboBox DataContext="{Binding Item2}" /> 
    <ComboBox DataContext="{Binding Item3}" /> 
    <ComboBox DataContext="{Binding Item4}" /> 
    <ComboBox DataContext="{Binding Item5}" /> 
    <ComboBox DataContext="{Binding Item6}" /> 
    <ComboBox DataContext="{Binding Item7}" /> 
    <ComboBox DataContext="{Binding Item8}" /> 
    <ComboBox DataContext="{Binding Item9}" /> 
    <ComboBox DataContext="{Binding Item10}" /> 
</StackPanel> 

는 물론, 그들이 것이 바람직하다 당신은 선택 상자

<ItemsControl ItemsSource="{Binding SelectedItems}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ComboBox SelectedItem="{Binding }" 
         ItemsSource="{Binding Source={x:Static local:Lists.ComboBoxItems}}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

감사합니다 레이첼 - '내가 당신을 이해한다면, 당신은 10 콤보 상자가 있습니다. 동일한 항목 목록이지만 다른 데이터 소스 '- 예, 각 콤보 상자는'SelectedItems 'ObservableCollection ..의 별도 항목에 바인딩됩니다. 그러나'ComboBoxes 용 DataSource를 컬렉션에 넣을 수 있는지 '에 대한 대답도 예 .. 혼란스럽게 유감스럽게 생각합니다. ItemsControl을 권하고 싶습니다. –

+0

@ Joe.Net 예, 당신의 상황에서'ItemsControl'을 추천합니다. 원래 질문에서 말했던 내용에 따라'ItemsControl.ItemCollection'을'SelectedItems'에 바인드하고 ComboBox에 ComboBox'SelectedItem = "{Binding}"'을 설정하면 선택한 항목을에있는 항목에 바인딩 할 수 있습니다. 컬렉션. ItemTemplate을 사용하고 있으므로 ComboBox에 대해 별도의 스타일을 만들 필요가 없습니다. – Rachel

+0

우수, Thanks Rachel –

2

각 선택 항목이 다른 ObservableCollection에의 항목에 바인딩합니다 ..

컬렉션, 나는 ItemsControl 템플릿을 할 것이고, 그냥 그렇게 취급 할 것입니다. 레이아웃을 사용자 정의하려는 경우가 아니라면 (즉, 뷰에서 함께 정렬되지 않음) 항목 수가 항상 "정적"인 경우에도 디자인을 단순화합니다.

항목을보기에 별도로 정렬하려면 10 개의 콤보 상자 만 있으면 더 적절할 수 있습니다.

+0

덕분에 리드를 표시 할 ItemsControl를 사용하는 것이.'컬렉션에 효과적으로 바인딩되어 있다면, ItemsControl 템플릿을 사용합니다.'- 각 콤보 상자는 시작시 비어있을 것입니다 - 아이템이 선택 될 때만 ObservableCollection에 추가됩니다 - 여전히 당신의 조언입니다 ItemsControl? (나는 콤보 상자를 패널에 넣는 것을 생각하고 있었기 때문에 주문했다.) –

+0

@ Joe.Net : 예 - "시작시 비어 있음"은 아마도 "시작시 null"이어야합니다. 선택시 값이 적절하게 설정됩니다. OC 은 10 개의 빈 값으로 초기화해야 할 필요가있을 것입니다 ...하지만 그렇습니다.이 방법을 사용합니다. –

-1

당신이 왜 이것을 필요로하는지 알지 못합니다 ... 아마도 이것을 결정하는 데 중요 할 것입니다 ... 여기에 내 찔림이 있습니다.

UI를 디자인하고 각 ComboBox에 이름을 지정하고 목록을 만든 다음 런타임에 각 목록을 해당 목록에 추가하는 것이 어떻겠습니까?

+0

yuck - 콤보 상자를 추가/제거하거나 스타일을 변경하거나 유지하려는 경우 유지 관리가 쉽지 않습니다. – ColinE

+0

실제로 원래 포스터가 요청한 내용은 ... maintainable, 우리는 모두 그 일을 꽤 잘 수행 할 수 있습니다. 그래도 나는 downvote받을 자격이 있다고 생각하지 않는다. – djdanlib

2

는 개인적으로 각 ComboBox갈 방법입니다 구축합니다 ItemTemplate이있는 ItemsControl 생각! 당신은 항상 이것들 중 정확히 10 개를 가지고 있습니까?

MVVM 관점에서, 선택보기 모델 모음이있는 상위보기 모델을 상상할 수 있습니다. 각 선택보기 모델에는 선택할 수있는 항목 목록과 현재 선택된 항목이 있습니다. 이 뷰 모델은보기에 쉽게 바인딩됩니다. 내가 바로 당신을 이해한다면

+0

감사합니다 콜린 - 예 10 -하지만 나중에 변경 될 것입니다 -하지만 난 그것을 변경하는 쉽고 우아한 방법 싶었어요 - 따라서 내 컨트롤 어레이 생각 .. –

관련 문제