Сетка данных WPF Caliburn не обновляется после редактирования данных в отдельной форме - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь создать простое приложение MVVM для просмотра и редактирования данных, таких как MS access, с помощью caliburn micro. Я довольно новичок в кодировании c #, WPF, MVVM, EF и т. Д., Но я пытаюсь изучить это самостоятельно. У меня уже было приложение с проводником экрана, меню, представлением сетки данных, отображающим данные, и формой для редактирования / добавления данных. Моя проблема заключается в том, что когда я возвращаюсь из формы редактирования к представлению таблицы данных, сделанные мной изменения не отображаются в таблице данных. Мне нужно закрыть экран (деактивировать) и снова активировать его.

Я пробовал разные ответы от SO, PropertyChanged, collectionviewsource, нескольких методов привязки, отменить кэширование просмотра проводника экрана (я думаю, что есть проблема)

Спасибо.

datagridViewModel:

    public class MeldListViewModel : Screen
    {
        private tblMeldungen _Meldung;
        private BindableCollection<tblMeldungen> _Meldungen =new BindableCollection<tblMeldungen>();

        Schichtbuch_Entities context = new Schichtbuch_Entities();

        public MeldListViewModel()
        {
            GetData();

        }

        private void GetData()
        {
            context.tblMeldungen.Load();
            _Meldungen = new BindableCollection<tblMeldungen>();
            foreach (var item in context.tblMeldungen)
            {
                _Meldungen.Add(item);
            }
            //_Meldungen = context.tblMeldungen.Local();
            Refresh();
        }
/../
public BindableCollection<tblMeldungen> DisplayMeldungen
        {
            get { return _Meldungen; }
            set
            {
                _Meldungen = value;
                NotifyOfPropertyChange(() => DisplayMeldungen);

            }
        }
        public override object GetView(object context = null)
        {
            return null;


        public void Resync()
        {
            GetData();
            //_Meldungen = null;
            //_Meldungen = new BindableCollection<tblMeldungen>(context.tblMeldungen);
            NotifyOfPropertyChange(() => DisplayMeldungen);
            Refresh();
        }
/../

DataGridView:

/../
            <Button Grid.Column="1" Margin="10" x:Name="Resync" Style="{StaticResource RefreshButtonStyle}"/>
/../
        <!-- Trennlinie -->
        <Rectangle Grid.Row="1">
            <Rectangle.Fill>
/../
        </Rectangle>
        <!-- Liste der Meldungen -->
        <DataGrid x:Name="DisplayMeldungen" Grid.Row="2" Grid.RowSpan="2" AutoGenerateColumns="False" SelectedItem="{Binding Meldung , Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}" SelectionMode="Single" IsReadOnly="True">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="MeldungsID">
/../
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="Anlage" Width="60" Binding="{Binding MeldungAnlage}"/>
                <DataGridTextColumn Header="Firma" Width="80" Binding="{Binding MeldungFirma}"/>
                <DataGridTextColumn Header="Start" Binding="{Binding MeldungStart, StringFormat=dd.MM.yyyy HH:mm}"/>
                <DataGridTextColumn Header="Ende" Binding="{Binding MeldungEnde, StringFormat=dd.MM.yyyy HH:mm}"/>
                <DataGridTextColumn Header="Grund" Width="200" Binding="{Binding MeldungGrund}"/>
                <DataGridTextColumn Header="Ersteller" Width="100" Binding="{Binding MeldungErsteller}" />
                <DataGridTextColumn Header="Art der Meldung" Width="100" Binding="{Binding MeldungArt}"/>
                <DataGridTextColumn Header="Reduzierungswert" Binding="{Binding MeldungReduzierung}"/>
            </DataGrid.Columns>
        </DataGrid>

AppViewModel:

public class AppViewModel : Conductor<object>.Collection.OneActive
    {
        MeldListViewModel MeldListItem;
        MeldFormViewModel meldForm;
        MainMenViewModel MainMenItem = new MainMenViewModel() { DisplayName = "Hauptmenü" };
        MeldungenViewModel MeldungenItem = new MeldungenViewModel() { DisplayName = "Menü Meldungen" };
/../
        public void ShowMeldList()
        {
            MeldListItem = new MeldListViewModel() { DisplayName = "Meldungen" };
            ActivateItem(MeldListItem);
        }

        public void ShowMeldForm(int meldungsID)
        {
            //DeactivateItem(MeldListItem, true);
            meldForm = new MeldFormViewModel(meldungsID) { DisplayName = "Meldung ändern" };

            ActivateItem(meldForm);
        }
/../

Надеюсь, код в порядке, язык немецкий.

...