复杂的数据类型处理和东西是给你的,这是午餐前 5 分钟的示例,显示了多少 winforms 很糟糕以及多少 WPF 规则:
namespace WpfApplication5
{
public partial class MainWindow : Window
{
private List<Item> _items;
public List<Item> Items
{
get { return _items ?? (_items = new List<Item>()); }
}
public MainWindow()
{
InitializeComponent();
Items.Add(new Item() {Description = "Base metal Thickness"});
for (var i = 32; i > 0; i--)
{
Items.Add(new Item() {Description = "Metal Specification " + i.ToString()});
}
Items.Add(new Item() { Description = "Base metal specification" });
DataContext = this;
}
}
public class Item: INotifyPropertyChanged
{
private List<string> _values;
public List<string> Values
{
get { return _values ?? (_values = new List<string>()); }
}
public event PropertyChangedEventHandler PropertyChanged;
public string Description { get; set; }
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public Item()
{
Values.Add("Value1");
Values.Add("Value2");
Values.Add("Value3");
Values.Add("Value4");
Values.Add("Value5");
Values.Add("Value6");
}
}
}
XAML:
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Description}" Width="130"/>
<ItemsControl ItemsSource="{Binding Values}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}" Margin="2" Width="90"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
我看到您在这里还有其他几个要求,例如隐藏 texbox 和其他东西。如果这些行是不同的数据类型并不重要,你只需要做一个ViewModel(在这种情况下是 my public class Item
,它保存你想在屏幕上显示的数据,并让用户能够交互和。
例如,您可以将类List<string>
内部替换为Item
更复杂的内容,并添加一些诸如此类public bool IsVisible {get;set;}
的属性。
我强烈建议你看看 WPF(至少对于这个屏幕来说)。
将我的代码复制并粘贴到一个新的 -> WPF 项目中,您可以自己查看结果。