2016-09-22 132 views
0

我是WPF的新手,嘗試將程序從WinForms轉換爲WPF。我遇到了一個呃試圖從DataGridView轉換到DataGrid並添加行。任何幫助表示讚賞。向WPF 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

在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"); 
} 

,結果:

enter image description here

enter image description here

+0

所以,在這個例子中,我可以通過創建一個新的「人」,然後補充說,人可觀察集合添加一個新行,每當我想要的嗎? – Hank

+0

是的。一個好處是,如果您編輯視圖,集合會自動查看更改 – Richard

+0

我不確定是否應該爲此提出新問題,但也許您會知道。我試圖實現類似於你的例子,但與列中的內容是控件(複選框,按鈕等)每次我嘗試,我得到出現在單元格中是「System.WIndows.Controls.CheckBox 「或」System.WIndows.Controls.Button「而不是實際的控制。我已經正確地更改了類變量類型,並且在將它添加爲DataGrid ItemsSource之前,它確實顯示爲我的類的一部分。該列在XAML中也適用於複選框。有任何想法嗎? – Hank