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

标签 c# wpf mvvm wpf-controls wpfdatagrid

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

相关文章:

wpf - 数据绑定(bind)落后于事件通知 - 讨论

vb.net - PRISM 5 : ViewModelLocator in VB. NET,无法在 View 中实现 IView

ios - 如何在我的协议(protocol)中正确使用 associatedType

c# - 使用 MEF 导入从给定接口(interface)继承的类型

c# - Android Activity 的滑入/滑出动画。这个设置可以吗?

c# - WPF - 在没有结构化异常处理的情况下检查资源是否存在

wpf - 在 Xaml 中控制 WPF 动画

c# - 为什么有人会 Catch (Exception e) { throw e; }?

c# - 在标记中将数据绑定(bind)到转发器或以编程方式绑定(bind)它有什么区别

c# - 如何在 C# 中将 Wpf BitmapSource 转换为 byte[]