我是WPF的新手并尝试将程序从WinForms转换为WPF。我遇到了一个打嗝,试图从DataGridView转换为DataGrid并添加行。任何帮助表示赞赏。
原始代码:
for (int i = 0; i < noteArray.Count; i++)
{
int newIndex = dtgrdNotes.Rows.Add();
dtgrdNotes.Rows[newIndex].Cells[0].Value = noteArray[i].ToString();
dtgrdNotes.Rows[newIndex].Cells[1].Value = chkbx1.Checked;
dtgrdNotes.Rows[newIndex].Cells[2].Value = chkbx2.Checked;
}
我需要在WPF中使用该代码,并且我已经尝试了 dtgrdNotes.Items 的不同变体,甚至是 DataRowView ,但到目前为止还没有任何工作。有什么建议吗?
更新* XAML与理查德的控件问题:
<DataGrid Name="dtgrdNotes" Height="178" Width="739" HorizontalAlignment="Right" VerticalAlignment="Bottom" Canvas.Left="1" IsEnabled="False" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="dgtxtbxNote" Width="*" Binding="{Binding note}"/>
<DataGridCheckBoxColumn x:Name="dgchbxInquire" Width="100" Binding="{Binding inquire}" />
<DataGridCheckBoxColumn x:Name="dgchbxPrint" Width="100" Binding="{Binding print}" />
<DataGridTemplateColumn x:Name="dgbtncDelete" Width="80" Header="Button">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="dgbtncDeleteButton" Content="Delete" Width="50px" Height="10px" FontWeight="Bold" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:0)
在WPF中,数据控件必须绑定到一组数据,通常是可观察的集合。 您可以尝试创建一个包含一个或多个空链接数据和控件的集合。 Datagrid必须与您使用的模型相同。 我会给你一个例子:
的Datagrid:
<DataGrid x:Name="dtgPersons" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Width="1*" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Width="2*" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Last Name" Width="2.5*" Binding="{Binding LastName}"/>
<DataGridTextColumn Header="Age" Width="1*" Binding="{Binding Age}"/>
<DataGridCheckBoxColumn Width="*" Binding="{Binding Status}" Header="Status"/>
<DataGridTemplateColumn Width="*" Header="Action">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="Button_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
型号:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public bool Status { get; set; }
}
代码:
public MainWindow()
{
InitializeComponent();
ObservableCollection<Person> Persons = new ObservableCollection<Person>();
for(int i = 0; i < 10; i++)
{
Person p = new Person();
p.Id = i;
p.Age = i + 10;
p.Name = "Name " + i;
p.LastName = "LastName " + i;
p.Status = true;
Persons.Add(p);
}
dtgPersons.ItemsSource = Persons;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var person = dtgPersons.SelectedItem as Person;
MessageBox.Show(person.Name + " will be removed");
}
结果: