2016-12-19 4 views
0

개체를 여기서C#을 내가 C# WPF 프로그래밍 초보자 해요, 내가 어려움 (보낸이의 하루) 시스템을 만드는 방법을 알아내는 데 문제

1) 버튼 클릭으로 UI 요소 모음 (그룹 상자에 있음)이 생성됩니다.

2) 그룹 상자에는 텍스트 입력란 (int 입력)과 콤보 박스 (문자열 중에서 선택)가 있습니다. 나는 콤보 박스를리스트의 요소들로 채울 필요가있다. 입력란에서 입력을 받아서 콤보 상자에서 선택해야하고 내 구조체 목록에 배치해야합니다. Rules {String topic; int number}.

사용자가 생성하는 많은 그룹 박스에 대해이 작업을 수행해야합니다.

내가 가진 주된 질문은 이러한 콤보 상자에 액세스하여 어떻게 채우는가입니다. 어떻게 그들로부터 의견을 얻나요?

XAML는 C#에 관해서는

<Window x:Class="ExamMaker.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:ExamMaker" 
     mc:Ignorable="d" 
     Title="Exam Preparation" Height="350" Width="525" 
     Closing="Window_Closing"> 
    <Window.Resources> 
     <DataTemplate x:Key="ruleTemplate"> 
      <GroupBox x:Name="Rulebox" Header="Rule " HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="56" Width="468"> 
       <Grid HorizontalAlignment = "Left" Height="36" Margin="0,0,-2,0" VerticalAlignment="Top" Width="458"> 
        <Label x:Name="TopicRuleLabel" Content="Topic:" HorizontalAlignment="Left" Margin="5,4,0,0" VerticalAlignment="Top" Height="28"/> 
        <TextBox x:Name="NumberRuleTextBox" HorizontalAlignment="Left" Height="22" Margin="240,9,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="30" /> 
        <ComboBox x:Name="RuleComboBox" HorizontalAlignment="Left" Margin="50,9,0,0" VerticalAlignment="Top" Width="120"/> 
        <Label x:Name="NumberRuleLabel" Content="Number:" HorizontalAlignment="Left" Margin="179,4,0,0" VerticalAlignment="Top" Height="28"/> 
       </Grid> 
      </GroupBox> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="319" VerticalAlignment="Top" Width="517"> 
      <TabItem Header="Exam Preparation"> 
       <Grid Background="#FFE5E5E5" Margin="0,0,0,0"> 
        <ListView x:Name="listView" ItemsSource="{Binding Path=examQS}"> 
         <ContentControl ContentTemplate="{StaticResource ruleTemplate}"> 

         </ContentControl> 
        </ListView> 
       </Grid> 
      </TabItem> 
      <TabItem Header="Question Form" Margin="-2,0,0,0" HorizontalAlignment="Left" Width="95"> 

      </TabItem> 
      <TabItem Header="Setup" HorizontalAlignment="Left" Height="20" VerticalAlignment="Top" Width="54"> 

      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 

잘 나는 단지 하나 개의 관찰 가능한 거기 수집 및 추가하고 그것에서 항목을 제거하기위한 몇 가지 방법이있다.

+0

'올바른 방법'을 사용하려면 Model-View-ViewModel 아키텍처 패턴을 조사해야합니다. 이 문제는 템플릿이있는 것을 나타내는 ViewModel 형식을 만들어 WPF에서 해결됩니다. ViewModel 간의 통신은 종종 Event Aggregation과 같은 메시징 패턴을 사용하여 처리됩니다. –

+0

나는 그걸 읽었지만, 불행하게도 가능한 빨리 시제품을 내놓기 위해 위기 상황에 처해있다. 나는 거친 프로토 타입이 준비되면 제대로 만들 수있을 것이라고 생각하지만. 고맙습니다. – Adhordal

답변

0

가 좋아, 내가 무엇을보고에 따라, 내가 여기에 생각이 대해 갈 수있는 방법입니다 : 당신이 속성은 ObservableCollectionexamQS 1. examQs의 속성 말할 수 있습니다 "comboItemSource"

정의가 가정

ItemsSource="{Binding Path=examQS}" 

이 기능을 사용하려면 <ComboBox x:Name="RuleComboBox" HorizontalAlignment="Left" Margin="50,9,0,0" VerticalAlignment="Top" Width="120" ItemSource="{Binding Path=comboItemSource} />

  • 변경 : ItemSource에 바인딩을 추가하여 DataTemplate을에

  • 변경이 줄을

      <ListView x:Name="listView" ItemsSource="{Binding Path=examQS}" ItemTemplate="{StaticResource ruleTemplate}"/>

    emTemplate

    본인은 위의 일을한다고 생각합니다.

  • +0

    comboItemSource는 어디에 정의되어 있습니까? ObservableCollection 자체 또는 ObservableCollection에 포함 된 요소의 유형? – Adhordal

    +0

    첫 번째 경우 물어 보니 나를 용서해주십시오. (아주 새로운 것입니다.) 어떻게 이루어 졌습니까? comboItemSource는 어떤 유형입니까? – Adhordal