我有一个包含城市名、州名和国家名的集合,我将该集合绑定(bind)到我的 wpf 表单。我想在文本框中显示城市名称,在组合框中显示州名,在组合框中显示国家名称。所有的文本框和组合框都应该是动态的。我怎么能做这份工作?
任何人都建议我如何使用 MVVM 在 wpf 中动态设计此表单我正在尝试执行此代码但无法正确获得结果。要么我将所有内容都作为文本框或组合框,但我需要的是指定的文本框和组合框。
<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>
最佳答案
你的问题的关键是DataTemplates
.这些允许您将 View 绑定(bind)到自定义对象的集合。
您应该有一个暴露 ObservableCollection<TLocation>
的 ViewModel在哪里 TLocation
是一个公开公共(public)属性 Cityname、Statename 和 Countryname 的类。
在您的 View 中,您需要显示 ContentControl
,比如说一个 ListBox,它是 ItemSource
绑定(bind)到 ObservableCollection
的属性.
然后将列表框的 DataTemplate 设置为:
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=CityName}" />
<ComboBox Text="{Binding Path=StateName}" />
<ComboBox Text="{Binding Path=CountryName}" />
</StackPanel>
</DataTemplate>
另一种方法是使用 DataGrid。见 this article
关于c# - 如何添加动态控件而不是静态控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642790/