Изменить представление потерять данные - wpf - PullRequest
0 голосов
/ 09 октября 2018

Привет, я пытаюсь разработать Datalogger, поэтому я создаю меню, чтобы переключить параметры, я решил использовать DataTemplates и различные ViewModels. Меню

XAML:

<Window.Resources>
    <DataTemplate x:Name="GraficoVtemplate" DataType="{x:Type viewmodels:GraficoVM}">
        <view:GraficoV DataContext="{Binding}" />
    </DataTemplate>

    <DataTemplate x:Name="ListaVtemplate" DataType="{x:Type viewmodels:ListaVM}">
        <view:ListaV DataContext="{Binding }"/>
    </DataTemplate>
<ContentControl Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="4" Grid.RowSpan="5" Content="{Binding}"/>

Так я могу изменить текст данных;

XAML.CS

private void Novoteste_btn_Click(object sender, RoutedEventArgs e)
    {
        DataContext = new NovoTesteVM();
    }

    private void Lista_btn_Click(object sender, RoutedEventArgs e)
    {
        DataContext = new ListaVM();
    }

Это файлы, которые у меня есть, модели пусты, а viewmodals имеют некоторые контролы. Файлы

Проблема в том, что когда я меняю меню, содержимое предыдущего меню несохранено, то есть когда я выбираю меню «lista» и заполняю сетку данных, и я перехожу в другое меню, когда я снова выбираю меню «lista», данные теряются. Я не знаю, что мне нужно добавить или изменитьчтобы данные не терялись

Спасибо за объяснение!

Редактировать 1:

MainWindows.xaml.cs

private void Novoteste_btn_Click(object sender, RoutedEventArgs e)
    {
        DataContext = NovoTesteVM.NovoTesteViewModel;            
    }


    private void Grafico_btn_Click(object sender, RoutedEventArgs e)
    {
        DataContext = GraficoVM.Grafico;
    }

NovoTesteVM.CS

 public class NovoTesteVM
{

    private static NovoTesteVM novoTesteViewModel;
    public static NovoTesteVM NovoTesteViewModel
    {
        get
        {                
           novoTesteViewModel = novoTesteViewModel ?? new NovoTesteVM();

            return novoTesteViewModel;
        }

    }
}

1 Ответ

0 голосов
/ 09 октября 2018

Создайте свойства контейнера, чтобы сохранить wiewmodel для соответствующих представлений.Он теряет данные, потому что вы инициализируете новый объект по клику.

Пример кода -

    private NovoTesteVM novoTesteViewModel;
    public NovoTesteVM NovoTesteViewModel
    {
        get
        {
            novoTesteViewModel = novoTesteViewModel ?? new NovoTesteViewModel();
            return novoTesteViewModel;
        }

    }
...