【问题标题】:How to Add dynamic control instead of static control?如何添加动态控件而不是静态控件?
【发布时间】:2011-12-27 09:01:16
【问题描述】:

我有一个包含cityname、statename 和countryname 字段的集合,我将该集合绑定到我的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>

【问题讨论】:

  • 我认为问题在于动态添加控件,将 SQL 数据库绑定到表单。例如如果 SQL Column 是 DateTime,则相应的 DateTimePicker 应出现在表单中。用于字符串/整数的文本框和用于可观察字符串集合的组合框。
  • 是的,这是我想使用数据模板完成的任务
  • 这只是一个简单的在代码中为每一列添加控制循环不是吗?
  • @CodingBarfield:请给我举个例子?

标签: c# wpf mvvm wpf-controls wpfdatagrid


【解决方案1】:

问题的关键是DataTemplates。这些允许您将视图绑定到自定义对象的集合。

您应该有一个暴露 ObservableCollection&lt;TLocation&gt; 的 ViewModel,其中 TLocation 是一个暴露公共属性 Cityname、Statename 和 Countryname 的类。

在您的视图中,您需要显示一个ContentControl,比如一个ListBox,将其ItemSource 属性绑定到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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多