2015-06-20 36 views
1

的DataGridViewButtonColumn在winform我可以通過編程對一個DataGridView列(S)與循環添加行,讓這樣說創建WPF DataGrid中與列類型等於與WinForm的

private void rowsAdder() 
{ 
    for(int u = 0; u<= 10; u++) 
    { 
     classSelect.Rows.Add("Number " + u); 
     //classSelect is a name of a DataGridView, where the first column is a DataGridViewButtonColumn 
    } 
} 

然後我的問題是:

- 什麼是在WPF中添加行在DataGrid中的平等方式(使用循環Rows.Add()等)?

- 如何將列類型設置爲ButtonColumn?

如果這種幫助,我使用.NET 4.5

+0

假設你正在使用MVVM和數據綁定...添加行,綁定你'DataGrid'在視圖模型的'的ObservableCollection ',然後就添加/刪除集合中的項目。它們會反映在'DataGrid'中。 –

+0

@GrantWinney你能給我一個示例代碼嗎? –

回答

0

這是一個非常簡單的例子:

<Window x:Class="DataGridUpdateSourceTriggerOneWay.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:DataGridUpdateSourceTriggerOneWay" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid x:Name="DataGrid1" 
       IsReadOnly="False" 
       AutoGenerateColumns="False" 
       CanUserAddRows="False" 
       ItemsSource="{Binding data}"> 

     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Field"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Path=Name, Mode=TwoWay, 
        UpdateSourceTrigger=PropertyChanged}" Width="Auto"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Length of Field"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Path=Length, Mode=TwoWay, 
        UpdateSourceTrigger=PropertyChanged}" Width="Auto"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

這是你的DataGrid,它的ItemsSource一定到存在於數據後面的代碼隱藏:

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Data> data { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     data = new ObservableCollection<Data>(); 
     data.Add(new Data() { Name = "Data1", Length = 1 }); 
     data.Add(new Data() { Name = "Data2", Length = 2 }); 
     this.DataContext = this; 
    } 
} 

集合需要通知其綁定視圖元素的內容已經改變(項目添加或刪除),這就是ObservableCollection<Data>的工作。

這裏是數據類:

public class Data : INotifyPropertyChanged 
{ 
    private string _Name; 

    public string Name 
    { 
     get { return _Name; } 
     set 
     { 
      _Name = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("Name")); 
     } 
    } 

    private int _Length; 

    public int Length 
    { 
     get { return _Length; } 
     set 
     { 
      _Length = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("Length")); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
} 

INotifyPropertyChanged接口是爲特定目的的觀察者模式的實現部分:通知用戶是在發佈一個屬性的值剛剛改變。因此,更改這兩個propeties,存在集合的實例的名稱或長度將導致View更新。

讓我知道你是否需要更多細節。

哦,我忘了,你會如何添加一個新的行?只需處理放置在視圖某處的Button的Click事件,並將新的Data實例添加到數據收集中即可。

例:

data.Add(new Data() { Name = "Data3", Length = 3 }); 
+0

看來我有一些問題,INotifyPropertyChanged和ObservableCollection <>'不會顯示出來,VS說它找不到,我想念什麼? –

+0

對不起,我不知道我應該包含'System.ComponentModel'它現在完成了。 –

+0

@TommyAriaPradana啊,我剛到工作..我很抱歉,我沒有提供更多細節..但我很高興聽到你說得對。 –