Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

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/MVVM)MainViewModel中的单个实例_C#_Wpf_Mvvm_Instance - Fatal编程技术网

C# (WPF/MVVM)MainViewModel中的单个实例

C# (WPF/MVVM)MainViewModel中的单个实例,c#,wpf,mvvm,instance,C#,Wpf,Mvvm,Instance,我有一个项目有3个视图/视图模型(当然到现在为止!)。因此,我在MainView中有一个ListView来显示它们中的每一个,并且可以由用户选择。所以我用了这样的方法: class MainViewModel :INotifyPropertyChanged { public ObservableCollection<BaseViewModel> obv { get { return this._obv; } } public MainV

我有一个项目有3个视图/视图模型(当然到现在为止!)。因此,我在MainView中有一个ListView来显示它们中的每一个,并且可以由用户选择。所以我用了这样的方法:

class MainViewModel :INotifyPropertyChanged
{
    public ObservableCollection<BaseViewModel> obv
    {
        get { return this._obv; }
    }
    public MainViewModel()
    {
        pvm = new PViewModel();
        lvm = new LViewModel();
        svm = new SViewModel();
        cvm = new CViewModel();
        ivm = InstanceViewModel.Instance;
        obv.Add(pvm);
        obv.Add(lvm);
        obv.Add(svm);
    }
    .
    .
    .
}
但我不知道这是否正确

更新:我对定位器一无所知!因此,使用以下代码添加另一个类名定位器

class Locator
{
    public LViewModel LInstance
    {
        get { return new LViewModel(); }
    }
    public PViewModel PInstance
    {
        get { return new PViewModel(); }
    }
    public SViewModel SInstance
    {
        get { return new SViewModel(); }
    }
    public MainViewModel MainInstance
    {
        get { return new MainViewModel(); }
    }
}
但是我的MainViewModel仍然和以前一样!我确实将xaml更改为:

<!--<Window.DataContext>
    <viewmodel:MainViewModel/>
</Window.DataContext>-->
.
.
.
<!-- Just added the DataContext -->
<ListBox x:Name="ListBoxMenu" Margin="5" Grid.Column="0" ItemsSource="{Binding obv}" DataContext="{Binding MainInstance, Source={StaticResource LocatorVM}}">
.
.
.

.
.
.
.
.
.

但是仍然像以前一样,MainViewModel和其他ViewModels每次都被重新加载

是的,您需要创建虚拟机的“单例”,或者您可以使用大多数MVVM框架提供的
定位器。
(基本上也是这样的…)

让我们看看我能不能把你联系起来

嗯,我的。。。你知道些什么。有关定位器的详细信息

差不多。你想要的是:

class Locator
{
    private LViewModel _lInstance;
    public LViewModel LInstance
    {
        get { return _lInstance ?? (_lInstance = new LInstance()); }
    }
    ....
}

这样,您只需创建一次实例,并且仅在请求时创建,它们应该在更改之间生存:)

是的,您需要创建虚拟机的“单例”,或者您可以使用大多数MVVM框架提供的
定位器。
(基本上也是这样的…)

让我们看看我能不能把你联系起来

嗯,我的。。。你知道些什么。有关定位器的详细信息

差不多。你想要的是:

class Locator
{
    private LViewModel _lInstance;
    public LViewModel LInstance
    {
        get { return _lInstance ?? (_lInstance = new LInstance()); }
    }
    ....
}


这样,您只需创建一次实例,并且仅在请求时创建,并且它们应该在更改之间继续存在:)

1,请显示一些xaml。第二,展示一些相关代码。这种行为无法通过粘贴的示例重现我想你回答了自己的问题^^^@lokusking我为MainView添加了xaml。其他其实并不重要!:)@陈池我知道!但我不知道这样做是否合适,当然不是!我觉得没问题,请出示一些xaml。第二,展示一些相关代码。这种行为无法通过粘贴的示例重现我想你回答了自己的问题^^^@lokusking我为MainView添加了xaml。其他其实并不重要!:)@陈池我知道!但我不知道这样做是否合适,当然不是!用美沙酮看起来没问题!我不明白这到底是怎么回事,我已经更新了我的帖子,如果你能看一下,告诉我怎么做!这就像我最初写的一样?那叫定位器德金达。这是另一种看法:现在我明白了。效果很好。谢谢注意:虽然它不需要任何实例,这就是它的优点。谢谢!我不明白这到底是怎么回事,我已经更新了我的帖子,如果你能看一下,告诉我怎么做!这就像我最初写的一样?那叫定位器德金达。这是另一种看法:现在我明白了。效果很好。谢谢注意:虽然它不需要任何实例,这就是它的优点。
class Locator
{
    private LViewModel _lInstance;
    public LViewModel LInstance
    {
        get { return _lInstance ?? (_lInstance = new LInstance()); }
    }
    ....
}