如何在wpf中动态显示控件?

时间:2011-12-27 06:26:09

标签: c# .net wpf mvvm wpf-controls

我有一个包含字段cityname,statename和countryname的集合,我将该集合绑定到我的wpf表单。我想在文本框中显示cityname,在组合框中显示statename,在组合框中显示countryname。所有文本框和组合框都应该动态出现。我该怎么做这个工作?

任何人都建议我如何使用MVVM在wpf中动态设计此表单 我正在尝试执行此代码但未正确获得结果

<UserControl.Resources>

<DataTemplate x:Key="IntegerTemplate">
    <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>

<DataTemplate x:Key="StringTemplate">
    <DockPanel>
        <ComboBox Margin="10,0,0,0" x:Name="cmbFieldData" Grid.Column="1" Text="{Binding Path=CardField.FieldData, Mode=TwoWay}" />
    </DockPanel>
</DataTemplate>
<DataTemplate x:Key="DefaultTemplate">
</DataTemplate>
<DataTemplate x:Key="dataTemplate">
    <ContentControl x:Name="MyContentControl"  Content="{Binding}" ContentTemplate="{StaticResource DefaultTemplate}"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=CardField.FieldTag}" Value="City">
                <Setter TargetName="MyContentControl" Property="ContentTemplate"
                   Value="{StaticResource IntegerTemplate}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=CardField.FieldTag}" Value="State">
                <Setter TargetName="MyContentControl" Property="ContentTemplate"
                   Value="{StaticResource StringTemplate}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=CardField.FieldTag}" Value="Country">
                <Setter TargetName="MyContentControl" Property="ContentTemplate"
                   Value="{StaticResource StringTemplate}" />
            </DataTrigger>
            <!-- and so on -->
        </DataTemplate.Triggers>
    </DataTemplate>
</UserControl.Resources>

我们在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中获取值。那么我做错了什么?

0 个答案:

没有答案