2011-12-27 34 views
1

私はcityname、statename、countrynameのフィールドを持つコレクションを持っており、そのコレクションを自分のwpfフォームにバインドします。私はテキストボックスにcityname、コンボボックスにはstatename、コンボボックスにはcountrynameを表示したい。すべてのテキストボックスとコンボボックスが動的に表示されます。どうすればこの仕事をすることができますか?静的なコントロールの代わりに動的なコントロールを追加する方法?

MVVMを使用してwpfでこのフォームを動的に設計する方法を教えてください。このコードを実行しようとしていますが、正しく結果を得られません。私は、テキストボックスやコンボボックスとしてすべてを手に入れますが、必要なのは指定されたテキストボックスとコンボボックスです。

<Border Margin="3.5"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="125" /> 
     <ColumnDefinition Width="*" MinWidth="100" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <TextBlock x:Name="tbFieldTag" Cursor="Hand" VerticalAlignment="Center" HorizontalAlignment="Stretch" TextWrapping="Wrap" Margin="10,0,0,0" Text="{Binding Path=CardField.FieldTag}" /> 
      <TextBox Margin="10,0,0,0" x:Name="txtFieldData" Grid.Column="1" MaxLength="{Binding Path=CardField.MaximumLength}" Text="{Binding Path=CardField.FieldData, Mode=TwoWay}" /> 
      <!--<ComboBox Margin="10,0,0,0" x:Name="comboFieldData" Grid.Column="1" Text="{Binding Path=CardField.FieldTag}"/>--> 
    </Grid> 
</Border> 
+0

を参照してくださいhttp://arcanecode.com/2007/09/07/adding-wpf-controls-progrrammatically/ –

+0

私は質問がフォームにSQLデータベースのバインドで動的にコントロールを追加しようとしていると思います。例えば、 SQL ColumnがDateTimeの場合、対応するDateTimePickerがフォームに表示されます。文字列/整数のテキストボックス、および観察可能な文字列のコレクションのためのコンボボックス。 – Marshal

+1

はいこれはタスクです。私はdatatemplateを使用してそれを実現したいです – Tulsi

答えて

0

問題の鍵はDataTemplatesです。これらを使用すると、ビューをカスタムオブジェクトのコレクションにバインドできます。

を公開しているViewModelがある必要があります。TLocationは、PublicプロパティCityname、Statename、Countrynameを公開しているクラスです。

ビューでItemSourceプロパティがObservableCollectionにバインドされているContentControl、たとえばListBoxを表示する必要があります。

次に、あなたのようなものをリストボックス用のDataTemplateを設定します。

<DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <TextBox Text="{Binding Path=CityName}" /> 
     <ComboBox Text="{Binding Path=StateName}" /> 
     <ComboBox Text="{Binding Path=CountryName}" /> 
    </StackPanel> 
</DataTemplate> 

別のアプローチでは、DataGridを使用することです。 this article

関連する問題