How to Add dynamic control instead of static control?

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-11 05:36:52

问题


I have a collection with fields cityname, statename and countryname and I bind that collection to my wpf form. I want to display the cityname in a Textbox, the statename in a combobox and the countryname in a combobox. All the textboxes and comboboxes should come dynamically. How can I do this job?

Any one suggest me how to design this form dynamically in wpf using MVVM I am trying to do this code but not get result properly. Either I get everything as textbox or combobox, but what i need is textbox and combobox as specified.

<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>

回答1:


The key to your problem are DataTemplates. These allow you to bind your view to a collection of custom objects.

You should have a ViewModel that is exposing an ObservableCollection<TLocation> where TLocation is a class that is exposing public properties Cityname, Statename and Countryname.

In your View you need to show a ContentControl, say a ListBox, having it's ItemSource property bound to the ObservableCollection.

Then you set the DataTemplate for the Listbox to something like:

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

Another approach is to use a DataGrid. See this article



来源:https://stackoverflow.com/questions/8642790/how-to-add-dynamic-control-instead-of-static-control

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!