Как обновить\освежить тот же пользовательский элемент управления, используемый на несколько видов
Я добавляю запись из представления 2 в базу данных;
1. Запись успешно вставлена и мгновенно отображается в пользовательских элементов управления(элемент управления DataGrid) на тот же вид(Изображение2)
2. изменения не отображаются в представлении 1, Если я не закрою представление или приложение и не запущу его снова.
// Свойство INotifyProperty реализовано в классе ViewModelBase
Представление1
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:UC="clr-namespace:HRSimplified.Controls" x:Class="HRSimplified.MainWindow" Title="MainWindow" Height="628" Width="986"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <UC:EmployeeGridControl Grid.Column="1" /> </Grid> </Window>
Изображение2
<Window x:Class="HRSimplified.Windows.EmployeeDashboard" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Converters="clr-namespace:HRSimplified.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:HRSimplified.View" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:VM="clr-namespace:HRSimplified.ViewModel" xmlns:UC="clr-namespace:HRSimplified.Controls" mc:Ignorable="d" Title="EmployeeDashboard"> <Window.DataContext> <VM:ViewModel_Employee /> </Window.DataContext> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <UC:EmployeeGridControl /> <ItemsControl ItemsSource="{Binding Path=emp}"> <StackPanel> <TextBox EditValue="{Binding emp.Name, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}" Margin="5" /> <Button Command="{Binding AddCommand, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, ValidatesOnDataErrors=True}" Margin="5" Height="35" /> </StackPanel> </ItemsControl> </Window>
элемент управления UserControl
<UserControl x:Class="HRSimplified.Controls.EmployeeGridControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Converters="clr-namespace:HRSimplified.Converters" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:HRSimplified.View" xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:VM="clr-namespace:HRSimplified.ViewModel" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <DataGrid x:Name="MasterData" MaxHeight="1080" ItemsSource="{Binding MasterData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}"> <DataGridTextColumn x:Name="Name" Binding="{Binding Mode=TwoWay}" /> </DataGrid> </Grid> </UserControl>
ViewModel_Employee
public class ViewModel_Employee:ViewModelBase { public HRSimplifiedEntities Model = new HRSimplifiedEntities(); private ObservableCollection<Model.Employee> _MasterData; public ObservableCollection<Model.Employee> MasterData { get { return _MasterData; } set { SetProperty(ref this._MasterData, value); } } private Employee _emp; private ICommand _submitCommand; public Employee emp { get { return _emp; } set { _emp = value; OnPropertyChanged("EmployeeCollection"); } } public ViewModel_Employee() { MasterData = new ObservableCollection<Model.Employee> (Model.Employees.ToList() as IEnumerable<Employee>); } public ICommand AddCommand { get { if (_submitCommand== null) { _submitCommand = new RelayCommand(executeMethod, canExecuteMethod, false); } return _submitCommand; } } private bool canExecuteMethod(object parameter) { if (string.IsNullOrEmpty(emp.Name) || string.IsNullOrEmpty(emp.Gender) || string.IsNullOrEmpty(emp.Salary.ToString())) return false; else return true; } private void executeMethod(object parameter) { MasterData.Add(emp); Model.Employees.Add(emp); Model.SaveChanges(); System.Media.SystemSounds.Beep.Play(); }
Что я уже пробовал:
Я использовал одну и ту же модель представления на обоих видах.
но я думаю, что он создает новый экземпляр модели представления и datacontext для каждого представления.
Я хочу решить этот вопрос.