Не бросайте в меня камни - я новичок в программировании.
Основной вопрос - как автоматически обновлять сетку данных, которая представляет таблицу SQL с помощью Enity Framework, после каждого изменения в этой таблице?
Я создаю простое приложение с WPF для работы с таблицами SQL с помощью Entity Framework 6. В этом приложении есть изображение:

Итак, есть датагрид, который выглядит так:
<DataGrid CanUserAddRows="False" AutoGenerateColumns="False" x:Name="variableAssignmentDataGrid" ItemsSource="{Binding VariableAssignment,UpdateSourceTrigger=PropertyChanged}" Margin="30" >
<DataGrid.Columns>
<DataGridTextColumn Width="1*" Binding="{Binding Id}" Header="Id" IsReadOnly="True" />
<DataGridTextColumn Width="1*" Binding="{Binding IdMachine}" Header="IdMachine"/>
<DataGridTextColumn Width="1*" Binding="{Binding IdVariable}" Header="IdVariable"/>
<DataGridTextColumn Width="1*" Binding="{Binding IdUser}" Header="Id User"/>
<DataGridTextColumn Width="1*" Binding="{Binding Variable.Name}" Header="Name"/>
<DataGridTextColumn Width="1*" Binding="{Binding Subscription}" Header="Subscription"/>
<DataGridTextColumn Width="1*" Binding="{Binding Frequency}" Header="Frequency"/>
<DataGridCheckBoxColumn Width="1*" Binding="{Binding Enable,Mode=TwoWay}" Header="Enable"/>
<DataGridTextColumn Width="1.75*" Binding="{Binding Time}" Header="Time" FontSize="8"/>
<DataGridTemplateColumn Width="1*" Header="Modify" />
</DataGrid.Columns>
</DataGrid>
VariableAssignment, который используется для привязки, выглядит следующим образом:
public class DataManager : INotifyPropertyChanged
{
public Entities context = new Entities();
private ObservableCollection<VariableAssignment> variableAssignment;
public ObservableCollection<VariableAssignment> VariableAssignment
{
get { return variableAssignment; }
set { variableAssignment = value; OnPropertyChanged("VariableAssignment"); }
}
..}
В конструкторе этого класса я заполняю VariableAssignment элементами из таблицы SQL (context.VariableAssignments)
public DataManager()
{
VariableAssignment = new ObservableCollection<VariableAssignment>(context.VariableAssignments);
newVariableAssignment = new VariableAssignment();
}
Как вы можете видеть, в этом конструкторе я определил newVariableAssignment = new VariableAssignment (); - это нужно для добавления новых строк в мои таблицы SQL.
Метод добавления здесь
public void addNewVariableAssignment(..)
{
context.VariableAssignments.Add(newVariableAssignment);
newVariableAssignment.IdVariable = //adding values
context.SaveChanges();
}
Этот метод работает после нажатия на кнопку добавления.
private void addVariableButton_Click(object sender, RoutedEventArgs e)
{
dataManager.addNewVariable(..);
}
После нажатия кнопки ADD - строка добавляется в таблицу SQL, но моя сетка данных не обновляется. Как видите, я попробовал UpdateSourceTrigger, но по какой-то причине он не работает. Я нашел единственный способ обновить сетку данных - создать новую коллекцию ObservableCollection моей таблицы и поместить ее в ItemsSource таблицы данных после нажатия кнопки (см. Ниже)
private void addVariableButton_Click(object sender, RoutedEventArgs e)
{
dataManager.addNewVariable(addNameVariableTextBox.Text, addAddressTexBox.Text, addVariableTypeComboBox.Text, addSourceTypeAddComboBox.Text);
var varAssignSource = new ObservableCollection<VariableAssignment>(dataManager.context.VariableAssignments);
variableAssignmentDataGrid.ItemsSource = varAssignSource;
}
Но это не правильно, верно? Я имею в виду ... Теперь для обновления сетки данных мне нужно написать код вручную, используя некоторые методы / кнопки / все, что меняет мою таблицу
Но я хочу, чтобы сетка данных обновлялась автоматически после изменения из любого места.
Так что вы можете дать мне несколько советов?