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

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

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

<ItemsControl x:Name="items"
 ItemsSource="{Binding}"
 ItemTemplate="{StaticResource dataTemplate}"
/>

ОБНОВЛЕНИЕ: Я пытаюсь сделать следующий код:

<TextBlock x:Name="tbFieldTag" Cursor="Hand" VerticalAlignment="Center" HorizontalAlignment="Stretch" TextWrapping="Wrap" Margin="10,0,0,0" Text="{Binding Path=CardField.FieldTag}" />
            <ItemsControl x:Name="items"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource dataTemplate}"/>

В этом я получил значение TextBlock, ноя не получаю значение в ItemTemplate.так где я делаю не так?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Попробуйте это:

1) селектор шаблона данных

  public class CardFieldTemplateSelector : IValueConverter
    {

            public DataTemplate CityNameTemplate { get; set; } 

            public DataTemplate StateNameTemplate { get; set; }


            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                string fieldTag = (string) value;
                switch (fieldTag)
                {
                    case "City":
                        return CityNameTemplate;
                    case "State":
                        return StateNameTemplate;
                }

                throw new ArgumentOutOfRangeException();
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotSupportedException();
            }
        }

2) XAML:

 <selectors:CardFieldTemplateSelector x:Key="cardFieldTemplateSelector">
   <selectors:CardFieldTemplateSelector.CityNameTemplate>
     <DataTemplate>
      <DockPanel>
        <TextBox Margin="10,0,0,0" x:Name="IntegerTemplate" Grid.Column="1" MaxLength="{Binding Path=CardField.MaximumLength}" Text="{Binding Path=CardField.FieldData, Mode=TwoWay}" />
      </DockPanel>
     </DataTemplate>
   </selectors:CardFieldTemplateSelector.CityNameTemplate>

   <selectors:CardFieldTemplateSelector.StateNameTemplate>
     <DataTemplate>
      <DockPanel>
        <ComboBox Margin="10,0,0,0" x:Name="cmbFieldData" Grid.Column="1" Text="{Binding Path=CardField.FieldData, Mode=TwoWay}" />
     </DockPanel>
     </DataTemplate>
   </selectors:CardFieldTemplateSelector.StateNameTemplate>
 </selectors:CardFieldTemplateSelector>

<DataTemplate x:Key="dataTemplate">
   <ContentControl x:Name="MyContentControl" 
                   Content="{Binding}"
                   ContentTemplate="{Binding CardField.FieldTag, Converter={StaticResource cardFieldTemplateSelector}"/>
</DataTemplate>

<ItemsControl x:Name="items"
 ItemsSource="{Binding}"
 ItemTemplate="{StaticResource dataTemplate}"/>
0 голосов
/ 27 декабря 2011

Почему вы не можете использовать форму данных WPF из Codeplex .

В эту форму можно добавлять собственные редакторы, основанные на типах данных.

Надеюсьэта помощь.

...