Я только начинаю это понимать, но пока это работает.
<DataGrid CanUserAddRows="True" CanUserDeleteRows="True" ItemsSource="{Binding UserAlerts}" IsSynchronizedWithCurrentItem="True" x:Name="UserAlertsGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Node ID" Binding="{Binding Node_id}"></DataGridTextColumn>
<DataGridTextColumn Header="Threshold" Binding="{Binding Threshold}"></DataGridTextColumn>
<DataGridTextColumn Header="Type of Alert" Binding="{Binding TypeOfAlert}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Затем, чтобы заставить работать CanUserAddRows, вам нужен конструктор по умолчанию в вашей ViewModel (где вы делаетепривязки).Если конструктор по умолчанию отсутствует, вы не получите пустую строку.
class UserAlertViewModel : BaseViewModel
{
private readonly UserAlert _alertItem;
public UserAlertViewModel()
{
_alertItem = new UserAlert();
}
public UserAlertViewModel(UserAlert alertItem)
{
_alertItem = alertItem;
}
public int Node_id
{
get { return _alertItem.Node_id; }
set { _alertItem.Node_id = value; OnPropertyChanged("Node_id"); }
}
public double Threshold
{
get { return _alertItem.Threshold; }
set { _alertItem.Threshold = value; OnPropertyChanged("Threshold"); }
}
public string TypeOfAlert
{
get { return _alertItem.TypeOfAlert; }
set { _alertItem.TypeOfAlert = value; OnPropertyChanged("TypeOfAlert"); }
}
}
И в реальном окне вам нужно установить DataContext для DataGrid
public UserAlertWindow()
{
InitializeComponent();
this.DataContext = new ViewModel.UserAlertWindowViewModel();
UserAlertsGrid.DataContext = new ViewModel.UserAlertWindowViewModel(this);
}
ИДля обновления базы данных, когда пользователь редактирует или удаляет, проверьте эту ссылку, это выглядит очень многообещающе.http://www.dotnetcurry.com/ShowArticle.aspx?ID=566