Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在调用之间实现数据存储?(C#-WPF)_C#_Wpf_Data Access - Fatal编程技术网

在调用之间实现数据存储?(C#-WPF)

在调用之间实现数据存储?(C#-WPF),c#,wpf,data-access,C#,Wpf,Data Access,我有一个ALPHA应用程序,它允许您从和XPS文件中获取一个模糊字体,并存储.odttf文件以在Silverlight中使用。这个应用程序“工作”就像它在锡罐上所说的一样,尽管是以一种非常粗糙的方式 在清理此工具以创建BETA版的过程中,我可以跨越一个问题。我希望应用程序以向导的方式进行布局,从用户那里收集数据,比如使用哪种字体,在哪里保存提取的文件,等等 在当前的实现中,这都是在代码隐藏中完成的(实际上它调用了一个helper类)。但实现一个向导意味着每个数据段都收集在不同的“页面”上。我不想

我有一个ALPHA应用程序,它允许您从和XPS文件中获取一个模糊字体,并存储.odttf文件以在Silverlight中使用。这个应用程序“工作”就像它在锡罐上所说的一样,尽管是以一种非常粗糙的方式

在清理此工具以创建BETA版的过程中,我可以跨越一个问题。我希望应用程序以向导的方式进行布局,从用户那里收集数据,比如使用哪种字体,在哪里保存提取的文件,等等

在当前的实现中,这都是在代码隐藏中完成的(实际上它调用了一个helper类)。但实现一个向导意味着每个数据段都收集在不同的“页面”上。我不想使用页面构造函数简单地传递数据,因为我正在尝试实现MVVM,其目的是保持代码的整洁

我想我正在寻找的是一个数据存储在代码中的持久化windows。这样,我就可以在我的窗口(视图)中获取数据,通过绑定将其传递给我的viewmodel,并将其发送到windows模型(数据类)以存储在某处

我可以使用数据库或XML文件,但对于我需要的几条信息来说,这似乎是一个强大的存储

总之,有没有一种方法可以让内存中的对象持久化窗口调用,并且可以被多个模型(类)引用


谢谢

最好的方法是对所有页面使用相同的ViewModel,然后如果您以后想使用它,则将其序列化

public class MyViewModel
{
    // Properties to be serialized
    public string MyViewModelProperty1 = "";
    public string MyViewModelProperty2 = "";

    // Save to file.
    public virtual bool Save(string viewmodelFilePath)
    {
        try
        {
            Directory.CreateDirectory(Path.GetDirectoryName(viewmodelFilePath));
            StreamWriter write = new StreamWriter(viewmodelFilePath);
            XmlSerializer xml = new XmlSerializer(GetType());
            xml.Serialize(write, this);
            write.Close();
        }
        catch
        {
            return false;
        }
        return true;
    }

    // Load from file.
    public static object Load(Type type, string viewmodelFilePath)
    {
        StreamReader reader;
        object settings;
        XmlSerializer xml = new XmlSerializer(type);

        try
        {
            reader = new StreamReader(viewmodelFilePath);
            viewmodel = xml.Deserialize(reader);
            reader.Close();
        }
        catch
        {
            viewmodel = 
                type.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        }
        return viewmodel;
    }
}

Petzold book的原始代码

用于存储数据并从所有视图访问数据的静态类或单例?

我曾想到过这一点,但MVVM模型并非如此,如果我继续这样做,我也可能不使用MVVM。当然,在第一个窗口打开之前,必须有一种方法来创建一个对象,实现中的其他类可以访问该对象。谢谢你的意见!你为什么说MVVM不是真的?MVVM不限制您在不同的视图中使用相同的viewModel…抱歉,true是一个错误的词,但鉴于我对MVVM的理解,我更希望每个模型有一个模型视图。我知道你在做什么,这是一个关于单一模型的好建议,谢谢分享!虽然我将实际尝试实现内存中的数据存储,但您的方法本质上就是我在上下文中寻找的方法,因此我已将您的答复标记为答案!干杯您不认为在几个类之间共享内存数据的序列化有点过分吗?有可能写入这样的类吗?