更改视图丢失数据-WPF

时间:2018-10-09 18:40:58

标签: c# wpf view viewmodel

嗨,我尝试开发Datalogger,所以我创建了一个菜单,以切换到选项,我决定使用DataTemplates和其他ViewModel。 Menu

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();
    }

这是我拥有的文件,模型为空,并且viewsmodals有一些控件。Files

问题在于,当我更改菜单时,不会保存上一个菜单的内容,也就是说,当我选择菜单“ 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 :(得分:0)

创建容器属性以为相应的视图保留wiewmodel。丢失数据是因为您要在点击时初始化新对象。

示例代码-

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

    }