以分隔形式编辑数据后,WPF Caliburn数据网格未更新

时间:2019-06-19 12:07:28

标签: c# wpf datagrid caliburn.micro

我尝试构建一个简单的MVVM应用程序,以使用caliburn micro查看和编辑数据,例如MS访问。我对编码c#,WPF,MVVM,EF等是非常陌生的东西,但是我尝试自己学习。我已经有了一个带有屏幕导体,菜单,显示数据的datagrid视图以及用于编辑/添加数据的表单的应用程序。 我的问题是,当我从编辑表单返回到datagridview时,所做的更改未显示在datagrid中。我需要关闭屏幕(停用)然后重新激活。

我尝试过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);
        }
/../

我希望代码还可以,语言是德语。

0 个答案:

没有答案