更改视图丢失数据 - WPF



嗨,我正在尝试开发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();
}

这是我拥有的文件,模型是空的,视图模式有一些控件。文件

问题是当我更改菜单时,上一个菜单的内容没有保存,也就是说,当我选择菜单"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;
}
}
}

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

示例代码 -

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

最新更新