Как добавить динамический контроль вместо статического контроля? - PullRequest
1 голос
/ 27 декабря 2011

У меня есть коллекция с полями cityname, statename и countryname, и я связываю эту коллекцию с моей формой wpf.Я хочу отобразить название города в текстовом поле, название страны в поле со списком и название страны в поле со списком.Все текстовые поля и комбинированные списки должны появляться динамически.Как я могу сделать эту работу?

Кто-нибудь подскажет мне, как динамически создавать эту форму в wpf с использованием MVVM Я пытаюсь сделать этот код, но не получаю результат должным образом.Либо я получаю все в виде текстового поля или комбинированного списка, но мне нужны текстовые поля и комбинированный список, как указано.

<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 Ответ

0 голосов
/ 18 января 2012

Ключом к вашей проблеме являются DataTemplates.Они позволяют вам привязать ваш вид к коллекции пользовательских объектов.

У вас должна быть ViewModel, которая представляет ObservableCollection<TLocation>, где TLocation - это класс, который предоставляет открытые свойства Cityname, Statename и Countryname.

В вашем представлении вам нужно отобразить ContentControl, скажем ListBox, со свойством ItemSource, связанным с ObservableCollection.

Затем вы устанавливаете шаблон данных для списка вчто-то вроде:

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

Другой подход заключается в использовании DataGrid.См. эту статью

...