2016-04-12 2 views
0

Я новый программист. Я постараюсь объяснить, как могу. Я программирую инструмент в WPF. Я сделал usercontrol следующим образом.C# Добавить элементы из списка для Usercontrol

User control

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="30"></ColumnDefinition> 
     <ColumnDefinition Width="150"></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition Width="50"></ColumnDefinition> 
     <ColumnDefinition Width="30"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Button x:Name="DelOutConBT" Margin="5" Content="X" Click=" Delete ConnSet"></Button> 
    <Label x:Name="OutConLB" Grid.Column="1" ></Label> 
    <ComboBox x:Name="InConComB" Grid.Column="2"></ComboBox> 
    <TextBox x:Name="ConnValueTX" Grid.Column="3" Margin="5"></TextBox> 
    <Button Grid.Column="4" Margin="5" Content=">>"></Button> 
</Grid> 

В главном окне, я уже программировали ListBox и вкладку. В списке будут заполнены некоторые элементы с запуском скрипта Python.

Теперь я хочу, чтобы пользователь мог добавить пользовательский контроль, выбрав элемент в списке и нажмите кнопку в главном окне.

Мой вопрос в том, как пользователь может автоматически загружать информацию при ее добавлении. Я хочу, чтобы метка в Usercontrol показывала элемент, выбранный из списка, а Combobox показывает все элементы в списке.

Затем, нажав кнопку «>>» в usercontrol, данные в usercontrol можно сохранить в классе или в другом. Потому что я буду использовать все данные, заполненные в usercontrols, другим скриптом Python.

Это то, что я запрограммировал, чтобы добавить элемент управления пользователя в главное окно.

MainWindow.xaml.cs

private void ConSel_Click(object sender, RoutedEventArgs e) 
{ 
    if (ListB.SelectedItem != null) 
    { 
     string name = ((ListBoxItem)ListB.SelectedItem).Name;     
     ConnSet CSobj = new ConnSet(); 
     StkConn.Children.Add(CSobj);     
    }       
} 
+0

Вы должны делать это с помощью TemplateSelector в ItemsControl. Это было бы относительно легко. –

ответ

0

Я думаю, что вы ищете это "стиль" для ListView. Ваш вопрос не очень понятно, поэтому я не могу дать вам то, что вы ищете, но вот пример ListView с помощью привязок, которые будут делать то, что вам нужно:

UI:

<ListBox ItemsSource="{Binding Items}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="30"/> 
        <ColumnDefinition Width="150"/> 
        <ColumnDefinition/> 
        <ColumnDefinition Width="50"/> 
        <ColumnDefinition Width="30"/> 
       </Grid.ColumnDefinitions> 
       <Button x:Name="DelOutConBT" Margin="5" Content="X" Click=" Delete ConnSet"/> 
       <Label x:Name="OutConLB" Grid.Column="1" ></Label> 
       <ComboBox x:Name="InConComB" Grid.Column="2"></ComboBox> 
       <TextBox x:Name="ConnValueTX" Grid.Column="3" Margin="5"></TextBox> 
       <Button Grid.Column="4" Margin="5" Content=">>"></Button> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

код за:

public ObservableCollection<ConnSet> Items { get; set; } 

private void ConSel_Click(object sender, RoutedEventArgs e) 
{ 
    if (ListB.SelectedItem != null) 
    { 
     string name = ((ListBoxItem)ListB.SelectedItem).Name;     
     ConnSet CSobj = new ConnSet(); 
     Items.Add(CSobj); // with the correct bindings, this will push to the UI for you 
    }       
} 

Быстрое редактирование: то, что происходит в коде XAML является то, что он говорит «для каждого элемента, выполните этот шаблон для дизайна» поэтому, когда добавляется новый элемент , он смотрит на этот шаблон и выкладывает все для вас.

Обратите внимание, что если вы используете WPF, я бы порекомендовал искать в шаблонах MVVM или MVC. Из того, что я видел, именно так WPF был разработан для использования. Есть много хороших книг по теме, которые вы можете проверить. Надеюсь, это помогло!

+1

Во-первых, Спасибо за помощь. Я пытаюсь объяснить более четко. Я не хочу, чтобы usercontrol был добавлен в список. Я хочу добавить его на вкладке. Список и вкладка в главном окне уже выполнены. Моя проблема заключается в том, как Combobox UI загрузит все элементы из списка, а Label загрузит элемент, выбранный из списка. Надеюсь, это более понятно. >. < –

+0

Я думаю, что я понимаю вас немного лучше. Я думаю, что вы хотите сделать, это поставить «StackPanel» во вторую вкладку с именем, а затем поместить в нее элемент управления. Тогда: ControlHost.Children.Add (CSobj); –

+0

Если это ответит на ваш вопрос, не могли бы вы пометить его как «ответ», и я могу добавить второй комментарий к моему ответу, чтобы другие могли получить преимущество от решения? –

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