【发布时间】:2011-12-27 06:26:08
【问题描述】:
我有一个包含cityname、statename 和countryname 字段的集合,我将该集合绑定到我的wpf 表单。我想在文本框中显示城市名称,在组合框中显示州名,在组合框中显示国家名称。所有的文本框和组合框都应该是动态的。我该如何做这份工作?
有人建议我如何使用 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 中的值。那我哪里做错了?
【问题讨论】:
-
您的方法对我来说似乎有效。什么不适合你?
-
我没有在这段代码中获得动态控制
-
@ColinE:我在我的视图模型中使用 Vladimir Dorokhov 指定的“数据模板选择器”:在下面的答案中,但不幸的是,在调试期间没有调用该类。
标签: c# .net wpf mvvm wpf-controls