【发布时间】:2017-10-11 12:13:33
【问题描述】:
我有一个项目: 原样:我正在基于 DataTemplate 生成 ListBox,其中包含来自 ObservableCollection 的数据(使用属性绑定) - 这很好用。它只包含带有名称的 texdtBlock 和带有值的 TextBox(双向绑定)。
待定:我想根据值的类型为值生成动态类型的字段。值可以是字符串 - 文本框、整数 - 文本框(理想情况是检查用户是否仅使用数字)、双精度和布尔值 - 复选框。
这是我的 XAML:
<ListBox x:Name="ListBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" Margin="2" Grid.Column="0"/>
<TextBox Text="{Binding Value, Mode=TwoWay}" Margin="2" Grid.Column="1" IsEnabled="{Binding IsLocked}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这里是 C# 代码:
InitializeComponent();
DataContext = this;
ListBox1.ItemsSource = valuesList;
虽然 valuesList 包含的对象具有: 字符串名称; 字符串值; (必须解析) 字符串类型; (稍后枚举)
您能给我一些关于如何生成这种 XAML 的提示吗?我的意思是可以使用绑定来做到这一点,还是我应该在后面的代码中创建“ListBoxRow”或其他东西并用它填充列表框?我想要一个更清洁的解决方案。那样的话,我认为我不会使用绑定,并且可能需要大量代码来完成它。
提前致谢。
【问题讨论】:
-
所以你想绑定你的列表框并让每一行都有自定义控件,具体取决于“valuesList”中当前的类型?
-
是的,完全正确。 As Name John 年龄 45 HasCar 复选框