Как клонировать всю сетку элементов управления? - PullRequest
1 голос
/ 08 февраля 2009

У меня есть следующий код, и в основном я не могу понять, как клонировать всю сетку и сделать их копию рядом друг с другом ... для ясного понимания, это как-то связано с больницей приложение и сетка связаны с беременностью, поэтому, когда указанная кнопка «ДОБАВИТЬ РЕБЕНКА» должна быть создана во время выполнения, необходимо создать новую сетку, спасибо за помощь, приведенную ниже, это ссылка, которая может помочь людям, потому что я попробовал ее, но не уверен, как отобразить он

Как можно клонировать объект WPF?

Ответы [ 3 ]

1 голос
/ 08 февраля 2009

Вы должны поместить объект, который вы хотите «клонировать» в DataTemplate и ссылаться на этот шаблон из ItemsControl, затем, когда вам понадобится другая сетка, добавить еще один элемент в элемент управления элементов (или, что еще лучше, в список). элемент управления привязан), и ItemsControl создаст новую сетку и свяжет ее с новым объектом.

Для примера посмотрите на это сообщение в моем блоге.

Вот пример для этого приложения (я оставил только соответствующие части, и я не проверял его, поэтому, возможно, там есть некоторые опечатки):

<Window ... >
   <Window.Resources>
      <DataTemplate x:Key="ChildTemplate">
         <Grid>
            ...
            <TextBlock Text="Delivery Date:" Grid.Column="0" Grid.Row="0"/>
            <TextBox Text="{Binding DeliveryDate}" Grid.Column="1" Grid.Row="0"/>
            <TextBlock Text="Delivery Time:" Grid.Column="0" Grid.Row="1"/>
            <TextBox Text="{Binding DeliveryTime}" Grid.Column="1" Grid.Row="1"/>
            ...
         </Grid>
      </DataTemplate>
   </Window.Resources>
   ...
      <Button Content="AddChild" Click="AddChildClick"/>
   ...
      <ScrollViewer>
          <ItemsControl ItemsSource="{Binding AllChildren}" ItemsTemplate="{StaticResource ChildTemplate}">
              <ItemsControl.PanelTemplate>
                  <ItemsPanelTemplate><StackPanel Orientation="Horizontal"/></ItemPanelTemplate>
              <ItemsControl.PanelTemplate>
      </ScrollViewer>
    ...
</Window>

И в CS:

  1. Установить объект со всеми данными формы в качестве окна DataContext. Я назову этот класс PostDelveryData.
  2. Создайте другой класс с повторяющимися данными. Я назову это ChildDeliveryData.
  3. Добавить свойство типа ObservableCollection<ChildDeliveryData> с именем AllChildren в PostDeliveryData; важно, что это будет ObservableCollection, а не какой-либо другой тип коллекции.
  4. Теперь по волшебству:

    private void AddChildClick(object sender, RoutedEvetnArgs e)
    {
       ((PostDeliveryData)DataContext).AllChildren.Add(new ChildDeliveryData());
    }
    

А когда вы добавляете новый элемент в список, будет добавлена ​​еще одна копия всего шаблона данных.

0 голосов
/ 08 февраля 2009

Если я правильно понимаю, вы должны создать UserControl, который обернет вашу Grid и последующие элементы управления внутри. И используйте этот пользовательский элемент управления везде, где вы хотите скопировать этот пользовательский интерфейс.

0 голосов
/ 08 февраля 2009

Я не уверен, что вы используете правильный подход здесь. Я хотел бы подойти к этой проблеме, создав «ChildGridControl» со ​​свойством Child, и пусть свойство Child обрабатывает привязку данных. Добавление нового дочернего элемента в графический интерфейс потребует создания нового экземпляра ChildGridControl.

...