gpt4 book ai didi

c# - 如何添加动态控件而不是静态控件?

转载 作者:行者123 更新时间:2023-12-03 10:49:50 24 4
gpt4 key购买 nike

我有一个包含城市名、州名和国家名的集合,我将该集合绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com