Прошу подсказать какая хорошая практика обновления отображения данных в DataGrid после операций с БД (EntityFramework/WPF). Ранее приходилось после каждого добавления/изменения/удаления повторно запрашивать данные из БД FillViewContracts(), хотелось бы этого избежать и настроить коллекцию на определение изменений в связанной коллекции.
class Contract_ViewModel : INotifyPropertyChanged
{
private ViewBalanceContract selectedContract;
//private OrganizationalStructure selectedOrgStruct;
public ViewBalanceContract SelectedContract
{
get { return selectedContract; }
set
{
selectedContract = value;
OnPropertyChanged("SelectedContract");
}
}
public ObservableCollection<ViewBalanceContract> ViewBalanceContracts { get; set; }
public Contract_ViewModel()
{
ViewBalanceContracts = new ObservableCollection<ViewBalanceContract> (EntityConnection.FillViewContracts());
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
XAML:
<DataGrid x:Name="dgContractView" ItemsSource="{Binding ViewBalanceContracts, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged }" SelectedItem="{Binding SelectedContract}" HorizontalAlignment="Left" Height="284" Margin="406,116,0,0" VerticalAlignment="Top" Width="1142" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Status" Binding="{Binding StatusContract }" Header="Статус" Width="45*" />
<DataGridTextColumn x:Name="NameCustomer" Binding="{Binding NameCustomer}" Header="Заказчик" Width="45*" >
....
</DataGrid>
Загрузка данных:
internal static IEnumerable<ViewBalanceContract> FillViewContracts()
{
var _db = new EntityModel();
{
//не выдает информацию return _db.ViewBalanceContracts.Local;
return _db.ViewBalanceContracts.ToList();
}
}
Код формы:
public MainWindow()
{
InitializeComponent();
DataContext = new Contract_ViewModel();
}
Продвижение своими сайтами как стратегия роста и независимости