我有一个dataGrid
,其中有两列,我想在我的.cs文件中使用dataGrid1.Items.Add()
添加行。
我知道它接收一个对象,但它如何确定对象中的哪个值?仅仅为了将新行放入dataGrid而创建一个泛型类感觉很麻烦,还有另外一种方法吗?
所以下面我有一个通用对象,如何使.Add
将名称和年龄添加到dataGrid1中?
泛型类:
namespace myApp
{
public class generic
{
private string name;
private int age;
public generic(string n, int a)
{
name = n;
age = a;
}
public string getName()
{
return name;
}
public int getAge()
{
return age;
}
}
}
我试过dataGrid1.Items.Add(new Item("Ann", 21))
; //显示一行空单元格。我只是不知道如何运作
编辑以获取更多信息:
在我的.xaml
中 <DataGrid x:Name="dataGrid1" VerticalAlignment="Top" />
在我的cs文件中:
DataGridTextColumn nameColumn = new DataGridTextColumn();
DataGridTextColumn ageColumn = new DataGridTextColumn();
nameColumn.Header = "name";
nameColumn.Binding = new Binding("name");
dataGrid1.Columns.Add(nameColumn);
ageColumn.Header = "age";
ageColumn.Binding = new Binding("age");
dataGrid1.Columns.Add(ageColumn);
然后我有一个点击功能,每次点击都会生成一个新名称和年龄,然后将其添加到dataGrid1
答案 0 :(得分:0)
默认情况下,DataGrid
会为数据项类中的每个公共属性生成一列(AutoGenerateColumns
应为true
;如果不是,请在XAML中进行,所以你需要相应地添加公共属性。您应该在XAML中定义列并创建一个ObservableCollection
类generic
的主视图模型,而不是手动将它们添加到Items
,但罗马不是构建的一天内。
这个版本的课程应该有效:
public class generic
{
public generic(string n, int a)
{
name = n;
age = a;
}
public string name { get; set; }
public int age { get; set; }
}
你对这种存在的直觉&#34;凌乱&#34;对于这个领域相对较新的人来说很自然,但这是错误的。什么&#34;凌乱&#34;试图将所有数据存储在用户界面控件中。当你以这种方式编写代码时,一切都会迅速变成一场噩梦。您需要做的每件事都涉及编写多行半冗余代码来获取数据项并对其执行任何操作。这种做事方式就像把你拥有的所有东西都存放在汽车后备箱里,然后在淋浴后穿着街头赤身裸体穿衣服,或者你需要一个干净的叉子。当然,所有逻辑都会从一个事件处理程序复制并粘贴到下一个事件处理程序,然后稍作修改。
我曾经称之为&#34; RAD综合症&#34;回到90年代,当快速应用开发&#34;是VB或Delphi等任何环境的热门词汇。 WPF不鼓励你以这种方式编写代码,而且实际上是最好的。可以这样思考:结构化编程在我80年代小时候第一次遇到它时对我来说似乎有点武断,面向对象编程后来似乎很奇怪。但在我习惯与他们合作之后,我发现它们非常有用。与MVVM相同的处理方式。