Laden...

Inhalte speichern bei Seitenwechsel

Erstellt von Tom68 vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.210 Views
T
Tom68 Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren
Inhalte speichern bei Seitenwechsel

Hallo,

ich nutze wpf und MVVM und möchte die Inhalte aus Textboxen usw. bei einem Viewwechsel speichern, so das diese wieder beim zurück wechsel zum ersten View wieder eingetragen werden.

Oder gibt es dafür eine andere Möglichkeit. Bei jedem Wechsel sind die Inhalte ja weg bzw leer.

VG
Tom

5.658 Beiträge seit 2006
vor 7 Jahren

Hi Tom68,

die Werte stehen doch im ViewModel und werden beim Wechsel der View nicht verändert.

Wenn die zweite View auf das gleiche VM zugreift, und die Daten ändert, dann mußt du die Werte tatsächlich zwischenspeichern.

Mehr kann man dazu nicht sagen, ohne den Code zu kennen...

Weeks of programming can save you hours of planning

T
Tom68 Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren

Hallo,

ich habe mir eine Klasse NavigationViewModel angelegt mit folgendem Inhalt:

  class NavigationViewModel : INotifyPropertyChanged

    {

        public ICommand OneCommand { get; set; }

        public ICommand MultiCommand { get; set; }

        private object selectedViewModel;

        public object SelectedViewModel
        {
            get { return selectedViewModel; }
            set {
                selectedViewModel = value;
                OnPropertyChanged("SelectedViewModel");
            }

        }



        public NavigationViewModel()
        {
            OneCommand = new BaseCommand(OpenEmp);
            MultiCommand = new BaseCommand(OpenDept);
        }

        private void OpenEmp(object obj)
        {
                SelectedViewModel = new OneViewModel();
        }

        private void OpenDept(object obj)

        {
                SelectedViewModel = new MultiViewModel();
         }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

    }

Im Xaml:


 <DataTemplate DataType="{x:Type vm:OneViewModel}">
            <vs:OneView/>
        </DataTemplate>

        <DataTemplate DataType="{x:Type vm:MultiViewModel}">
            <vs:MultiView/>
        </DataTemplate>

Im Mainwindow:


  InitializeComponent();
  this.DataContext = new NavigationViewModel();


Xaml der Buttons:


<StackPanel x:Name="navigation" DockPanel.Dock="Left" Width="180"  Background="#FF5D8BC6">
                <Button   Content="Einzelnes " Command="{Binding OneCommand}"></Button>
                <Button  Content="Automatisch" Command="{Binding MultiCommand}"></Button>
            </StackPanel>

und:


 <ContentControl x:Name="Pages" DockPanel.Dock="Right" Content="{Binding SelectedViewModel}" Width="826"/>

Das Umschalten funktioniert. Ich habe auf dem ersten View zwei Eingabefelder. Wenn ich dort etwas reinschreibe und dann den View wechsele auf den zweiten und wieder zum ersten View gehe, sind die Eingaben weg. Was ja auch logisch ist, denn es wird ja eine neue instanz des Views erzeugt.

Wie kann ich die Daten der Eingabefelder aber zwischenspeichern so das ich diese wieder herstellen kann. Das gilt auch für den zweiten View.

Hier habe ich einen ToggleButton dessen Status beim umschalten auch verloren geht.

VG
Tom

T
314 Beiträge seit 2013
vor 7 Jahren

Du erstellst nicht nur eine neue Instanz des Views sondern auch des ViewModels. Erstelle das ViewModel nur, wenn es noch nicht erstellt wurde.

T
Tom68 Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren

Hallo,

Danke dir. Hatte ich auch schon dran gedacht und versucht umzusetzen. Aber anscheindend damals falsch. Nun funktioniert es. Die Inhalte bleiben erhalten.

VG
Tom