C# (WPF/MVVM)MainViewModel中的单个实例
我有一个项目有3个视图/视图模型(当然到现在为止!)。因此,我在MainView中有一个ListView来显示它们中的每一个,并且可以由用户选择。所以我用了这样的方法: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
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()); }
}
....
}