1

私は次のコードを持っていますが、基本的に私が理解できないのは、グリッド全体を複製し、それらの空のコピーを並べて作成する方法です....明確に理解するために、これは病院のアプリケーションと関係がありますグリッドは妊娠に関連しているため、「ADD CHILD」ボタンを実行時にまったく新しいグリッドを作成する必要があります。

WPF オブジェクトのクローンを作成するにはどうすればよいですか?

4

3 に答える 3

1

「複製」したいオブジェクトを に配置し、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. すべてのフォーム データを含むオブジェクトを Window の として設定しますDataContext。このクラスを と呼びますPostDelveryData
  2. 繰り返しデータを使用して別のクラスを作成します。私はそれを呼びますChildDeliveryData
  3. ObservableCollection<ChildDeliveryData>に呼び出されるタイプのプロパティを追加しAllChildrenますPostDeliveryData。それが重要でObservableCollectionあり、他のタイプのコレクションではありません。
  4. さて、魔法のために:

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

リストに新しい項目を追加すると、データ テンプレート全体の別のコピーが追加されます。

于 2009-02-08T11:07:39.587 に答える
0

ここで正しいアプローチを使用しているかどうかはわかりません。Child プロパティを使用して「ChildGridControl」を作成し、Child プロパティにデータバインディングを処理させることで、この問題に取り組みます。GUI に新しい子を追加するには、ChildGridControl の新しいインスタンスを作成する必要があります。

于 2009-02-08T04:24:13.100 に答える
0

私が正しく理解している場合は、Grid と後続のコントロールを内部にラップする UserControl を作成する必要があります。そして、その UI をレプリケートしたい場所ならどこでも、このユーザー コントロールを使用します。

于 2009-02-08T10:34:58.390 に答える