WPF 动态表格:添加删除行,包含日期、光源、电流等数据
以下是实现该功能的代码:
XAML 代码:
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Content="新增行" Click="AddRow_Click" Grid.Row="0" Grid.Column="0"/>
<Button Content="删除最后一行" Click="DeleteLastRow_Click" Grid.Row="0" Grid.Column="1"/>
<Label Content="开始日期" Grid.Row="1" Grid.Column="0"/>
<Label Content="结束日期" Grid.Row="1" Grid.Column="1"/>
<Label Content="光源" Grid.Row="1" Grid.Column="2"/>
<Label Content="电流" Grid.Row="1" Grid.Column="3"/>
<Label Content="电压" Grid.Row="1" Grid.Column="4"/>
<Label Content="泵异常温度值" Grid.Row="1" Grid.Column="5"/>
<Label Content="泵温度值" Grid.Row="1" Grid.Column="6"/>
<Label Content="功率异常值" Grid.Row="1" Grid.Column="7"/>
<Label Content="功率值" Grid.Row="1" Grid.Column="8"/>
<StackPanel Grid.Row="2" Grid.ColumnSpan="9" Orientation="Vertical" Margin="10">
<ItemsControl ItemsSource="{Binding Rows}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<DatePicker SelectedDate="{Binding StartDate}" Grid.Column="0"/>
<DatePicker SelectedDate="{Binding EndDate}" Grid.Column="1"/>
<ComboBox ItemsSource="{Binding LightSources}" SelectedItem="{Binding LightSource}" Grid.Column="2"/>
<TextBox Text="{Binding Current}" Grid.Column="3"/>
<TextBox Text="{Binding Voltage}" Grid.Column="4"/>
<TextBox Text="{Binding PumpAbnormalTemperature}" Grid.Column="5"/>
<TextBox Text="{Binding PumpTemperature}" Grid.Column="6"/>
<TextBox Text="{Binding PowerAbnormalValue}" Grid.Column="7"/>
<TextBox Text="{Binding PowerValue}" Grid.Column="8"/>
<Button Content="{Binding Control}" Click="Control_Click" Grid.Column="9"/>
<Image Source="{Binding ImageSource}" Width="20" Height="20" Grid.Column="10"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</Window>
C# 代码:
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace WpfApp
{
public partial class MainWindow : Window
{
private ObservableCollection<RowModel> rows;
public ObservableCollection<RowModel> Rows
{
get { return rows; }
set
{
rows = value;
OnPropertyChanged("Rows");
}
}
public MainWindow()
{
InitializeComponent();
Rows = new ObservableCollection<RowModel>();
Rows.Add(new RowModel());
}
private void AddRow_Click(object sender, RoutedEventArgs e)
{
Rows.Add(new RowModel());
}
private void DeleteLastRow_Click(object sender, RoutedEventArgs e)
{
if (Rows.Count > 0)
{
Rows.RemoveAt(Rows.Count - 1);
}
}
private void Control_Click(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
if (button != null)
{
RowModel row = button.DataContext as RowModel;
if (row != null)
{
if (row.Control == '开')
{
row.Control = '关';
row.ImageSource = new BitmapImage(new Uri("pack://application:,,/img/led_green.png"));
}
else
{
row.Control = '开';
row.ImageSource = new BitmapImage(new Uri("pack://application:,,/img/led_gray.png"));
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class RowModel : INotifyPropertyChanged
{
private DateTime startDate;
private DateTime endDate;
private string lightSource;
private string[] lightSources = { '光源1', '光源2', '光源3', '光源4', '光源5', '光源6', '光源7', '光源8', '光源9', '光源10', '光源11', '光源12', '光源13', '光源14', '光源15', '光源16', '光源17', '光源18', '光源19', '光源20' };
private string current;
private string voltage;
private string pumpAbnormalTemperature;
private string pumpTemperature;
private string powerAbnormalValue;
private string powerValue;
private string control = '开';
private BitmapImage imageSource = new BitmapImage(new Uri("pack://application:,,/img/led_gray.png"));
public DateTime StartDate
{
get { return startDate; }
set
{
startDate = value;
OnPropertyChanged("StartDate");
}
}
public DateTime EndDate
{
get { return endDate; }
set
{
endDate = value;
OnPropertyChanged("EndDate");
}
}
public string LightSource
{
get { return lightSource; }
set
{
lightSource = value;
OnPropertyChanged("LightSource");
}
}
public string[] LightSources
{
get { return lightSources; }
}
public string Current
{
get { return current; }
set
{
current = value;
OnPropertyChanged("Current");
}
}
public string Voltage
{
get { return voltage; }
set
{
voltage = value;
OnPropertyChanged("Voltage");
}
}
public string PumpAbnormalTemperature
{
get { return pumpAbnormalTemperature; }
set
{
pumpAbnormalTemperature = value;
OnPropertyChanged("PumpAbnormalTemperature");
}
}
public string PumpTemperature
{
get { return pumpTemperature; }
set
{
pumpTemperature = value;
OnPropertyChanged("PumpTemperature");
}
}
public string PowerAbnormalValue
{
get { return powerAbnormalValue; }
set
{
powerAbnormalValue = value;
OnPropertyChanged("PowerAbnormalValue");
}
}
public string PowerValue
{
get { return powerValue; }
set
{
powerValue = value;
OnPropertyChanged("PowerValue");
}
}
public string Control
{
get { return control; }
set
{
control = value;
OnPropertyChanged("Control");
}
}
public BitmapImage ImageSource
{
get { return imageSource; }
set
{
imageSource = value;
OnPropertyChanged("ImageSource");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
原文地址: https://www.cveoy.top/t/topic/nwLe 著作权归作者所有。请勿转载和采集!