這是一個非常簡單的例子:
<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 });
假設你正在使用MVVM和數據綁定...添加行,綁定你'DataGrid'在視圖模型的'的ObservableCollection',然後就添加/刪除集合中的項目。它們會反映在'DataGrid'中。 –
@GrantWinney你能給我一個示例代碼嗎? –