C# XAML中带有ObjectInstance的ObjectDataProvider不';t在调试中调用ViewModel构造函数

C# XAML中带有ObjectInstance的ObjectDataProvider不';t在调试中调用ViewModel构造函数,c#,wpf,xaml,mvvm,objectdataprovider,C#,Wpf,Xaml,Mvvm,Objectdataprovider,在我以前的工作中,我们经常这样做,它在那里工作得很好,但由于某种原因,我现在无法让它工作 我只想使用ObjectDataProvider在XAML中创建ViewModel类的一个实例,这样我就可以引用它进行绑定,并且我已经在窗口中设置了ViewModel的DataContext,并且我有一个xmlns:local,它具有一个完全限定的名称,与我所有的ViewModel具有相同的命名空间 <Window x:Class="TimersXP.TimersHost" xmlns="http:/

在我以前的工作中,我们经常这样做,它在那里工作得很好,但由于某种原因,我现在无法让它工作

我只想使用ObjectDataProvider在XAML中创建ViewModel类的一个实例,这样我就可以引用它进行绑定,并且我已经在窗口中设置了ViewModel的DataContext,并且我有一个xmlns:local,它具有一个完全限定的名称,与我所有的ViewModel具有相同的命名空间

<Window 
x:Class="TimersXP.TimersHost"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:local="clr-namespace:TimersXP.ViewModels"
Name="TimersHostView"
SizeToContent="Height"
Title="TimersXP"
WindowStartupLocation="CenterScreen"
WindowStyle="ToolWindow"
DataContext="TimersHostViewModel">
<Window.Resources>
    <ObjectDataProvider x:Key="TimersHostViewModel" ObjectInstance="{x:Type local:TimersHostViewModel}"/>
</Window.Resources>

随后,我尝试使用ViewModel:

<Grid.ContextMenu>
        <ContextMenu ItemsSource="{Binding Source={StaticResource TimersHostViewModel}, Path=Skins}" Style="{DynamicResource styleBanner}"/>
</Grid.ContextMenu>

但我的问题是,当我在TimerHostViewModel无参数构造函数中设置断点时,它们在调试时永远不会被击中。因此,ObjectDataProvider似乎没有正确执行其工作。尽管窗口确实被创建了

我可以看到我的App.xaml.cs和MainWindow.xaml.cs中的断点被命中,InitializeComponent也被命中,甚至我的singleton模型类也被创建。但我一辈子都搞不懂为什么我的TimerHostViewModel类构造函数从未被调用

我记得的一件事是,在我的工作中,我们用了这样一句话:

我看到没有ObjectInstance,只有ObjectType,因此当我尝试删除ObjectInstance并设置ObjectType时,我得到以下错误: 对象引用未设置为对象的实例,它正在突出显示ObjectType=“{x:Type local:TimerHostViewModel}”…给出了什么?!为什么它在一种情况下有效而在另一种情况下无效?我对此很困惑

编辑:好的,我可以部分回答我自己的问题,但真正的问题仍然存在。 因此,我能够通过删除窗口的DataContext并将ObjectDataProvider ObjectInstance更改为ObjectType来调用ViewModel构造函数。然后将网格DataContext设置为绑定到TimerHostViewModel。但这仍然使我在ObjectDataProvider ObjectType:Object引用未设置为对象实例时出现了此设计时/编译时错误

<Window 
x:Class="TimersXP.TimersHost"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:local="clr-namespace:TimersXP.ViewModels"
Name="TimersHostView"
SizeToContent="Height"
Title="TimersXP"
WindowStartupLocation="CenterScreen"
WindowStyle="ToolWindow">
<Window.Resources>
    <ObjectDataProvider x:Key="TimersHostViewModel" ObjectType="{x:Type local:TimersHostViewModel}"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource TimersHostViewModel}}">

同时也不确定为什么它在某些情况下会起作用,但在其他情况下不会起作用,就像我现在使用的那种

完整源代码如下:

必须将IsAsynchronous=“True”属性添加到ObjectDataProvider,然后一切正常!感谢这条线的提醒!

即使从窗口中删除DataContext也没有什么不同。不知道为什么我会尝试,但见鬼,我会尝试任何一次。添加了部分解决方案,但问题的主要部分仍然没有答案。