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照亮多个视图视图视图模型的一个实例_C#_Wpf_Mvvm - Fatal编程技术网

c#wpf mvvm照亮多个视图视图视图模型的一个实例

c#wpf mvvm照亮多个视图视图视图模型的一个实例,c#,wpf,mvvm,C#,Wpf,Mvvm,我有两个视图和一个viewModel作为dataContext。启动应用程序后,它将启动两个viewModels实例。问题是如何只创建一个实例。我用的是mvvm灯。对不起我的英语:)不要使用DataContext,而是使用StaticResource 试试这个: 初见 好的,如果我明白你的意思。 您可以得到视图模型的两个实例,但实际上您只需要视图模型的一个实例可以在两个视图之间共享 在ViewModelLocator类中注册视图模型: (如果创建了新的MVVM灯光项目,则应创建该项目。) 公共

我有两个视图和一个viewModel作为dataContext。启动应用程序后,它将启动两个viewModels实例。问题是如何只创建一个实例。我用的是mvvm灯。对不起我的英语:)

不要使用DataContext,而是使用StaticResource

试试这个:

初见


好的,如果我明白你的意思。
您可以得到视图模型的两个实例,但实际上您只需要视图模型的一个实例可以在两个视图之间共享

在ViewModelLocator类中注册视图模型: (如果创建了新的MVVM灯光项目,则应创建该项目。)

公共类ViewModelLocator
{
静态ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default);
if(ViewModelBase.IsIndesignatic)
{
SimpleIoc.Default.Register();
}
其他的
{
SimpleIoc.Default.Register();
}
SimpleIoc.Default.Register();
}
/// 
///获取主属性。
/// 
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Performance”,
“CA1822:MarkMembersAstatic”,
justion=“此非静态成员用于数据绑定目的。”)]
public MainViewModel Main=>ServiceLocator.Current.GetInstance();
/// 
///清理所有资源。
/// 
公共静态无效清除()
{
}
}  
然后确保从ViewModelLocator类中为视图模型提供的名称中获取两个视图的DataContext,在我的示例中,它设置为Main。您可以在视图的XAML代码中将ViewModelLocator作为静态资源来执行此操作,如下所示:

<Window x:Class="mvvmLight.View.YourView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    DataContext="{Binding Main, Source={StaticResource Locator}}">  

看到您的一些代码会很好,这样可以更容易地找到问题。

粘贴视图以及视图模型和ViewModelLocator(如果有)的DataContext绑定。

可以简单地将视图模型设置为单例吗?这是什么意思?我听说过这种模式,但从未使用过。并且不介意如何在viewModel上实现这一点:)我需要在viewModel之间共享一些命令和绑定您是否在viewModel中实现了INotifyPropertyChanged?是否在属性的设置器中调用RaisePropertyChanged()?比如:'publicstringselectedname{get{return}SelectedName;}set{if({u SelectedName!=value){u SelectedName=value;RaisePropertyChanged(“SelectedName”);}}}}是的,当然。im使用RaisePropertyChanged(()=>PropertyName);在塞特。xaml.cs为空,因为它遵循mvvm模式。在那里它只是InitializeComponent()。您可以在ViewModel中使用静态属性。但这不是一个好方法。谢谢你的回复!新年快乐:)我稍后再回答
<Window x:Class="mvvmLight.View.YourView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    DataContext="{Binding Main, Source={StaticResource Locator}}">