gpt4 book ai didi

c# - 单击按钮更新 wpf 数据网格

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:07 25 4
gpt4 key购买 nike

我是 C# 的新手,正在为一些非常基本的事情苦苦挣扎。我发现使用数据网格的示例更加复杂,我只想要一个列表,我可以在按下按钮时“勾选”并向其添加时间戳。关于如何最好地做到这一点的任何想法?目前我有以下显然不起作用。

C#

    public class ListData
{
public int Number { get; set; }
public string Signature { get; set; }
}

List<ListData> LoadListData()
{
List<ListData> TableInfo = new List<ListData>();
TableInfo.Add(new ListData()
{
Number = 1,
});
TableInfo.Add(new ListData()
{
Number = 2,
});
TableInfo.Add(new ListData()
{
Number = 3,
});
return TableInfo;
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataGrid1.ItemsSource = LoadListData();
}

private void NextRow_Click(object sender, RoutedEventArgs e)
{
//update row i here
//add Signature = "J Doe " + DateTime.Now,
// i++
}

XAML

    <DataGrid Height="200" HorizontalAlignment="Right" Name="DataGrid1" VerticalAlignment="Top" Width="400" />

最佳答案

一个简单的解决方案是将时间戳属性(DateTime 类型)添加到您的 ListData 类。单击按钮后,您必须遍历现有集合并添加时间戳值,如下所示:

var myList = LoadListData();

foreach(var item in myList)
{
item.Timestamp = DateTime.Now;
}

在循环结束时,你必须做这样的事情:

DataGrid1.ItemsSource = myList;
DataGrid1.Items.Refresh(); //to refresh the rows in the DataGrid

更好的解决方案是使用 ObservableCollection您的项目并实现接口(interface)INotifyPropertyChanged在您的 ListData 类中,使用此伪代码:

    public class ListData : INotifyPropertyChanged
{

public event PropertyChangedEventHandler PropertyChanged;
private int _number;

public int Number
{
get
{
return _number;
}
set
{
if(value!= null)
{
_number = value;
OnPropertyChanged("Number");
}
}

private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}


public ObservableCollection<ListData> MyList {get;set;}

这样,您只需修改集合中每一项的时间戳属性,而无需手动更新 DataGrid。

关于 ObservableCollection 的更多信息 here .

关于c# - 单击按钮更新 wpf 数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com