带有 ObjectInstance 的 XAML 中的 ObjectDataProvider 不会在调试中调用 ViewModel Contructor



我们曾经在我以前的工作中做到这一点,并且在那里工作得很完美,但是由于某种原因,我无法立即工作。

我只想使用objectdataprovider在XAML中创建一个ViewModel类的实例,以便我可以将其引用以绑定,并且我在窗口上已将DataContext设置为" ViewModel",并且我已经有了XMLNS:本地名称完全合格的名称,其名称空间与我所有的ViewModels相同。

<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>

但是我的问题是,当我在timershostviewmodel-never-never-new boint parameter-nouschor中设置突破点时,调试时从未击中它们。因此,看来ObjectDataProvider无法正确完成工作。尽管窗口确实会创建。

我可以看到我的app.xaml.cs和mainwindow.xaml.cs中的突破点受到命中,也会击中initializecomponent,甚至创建了我的Singleton模型类。但是我一生无法弄清楚为什么我的timershostviewmodel类构造函数从未被调用。

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

我看到没有objectInstance,而只有ObjectType,因此当我尝试删除ObjectInstance并设置ObjectType时,我会收到以下错误:对象引用未设置为对象的实例,它正在突出显示objectType =" {x:type local:timershostviewmodel}" ...什么给?为什么它在一个实例而不是另一个情况下起作用?我对此非常困惑。

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

<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}}">

仍然不确定为什么在某些情况下它会起作用,而其他情况下的工作,例如我现在正在使用的那个。

此处的完整源代码:http://timersxp.codeplex.com/sourcecontrol/latest#vs2013/timersxp/views/timershost.xaml

必须将isasynchronous =" true"属性添加到ObjectDataProvider,然后一切都起作用了!多亏了这个线程的头!http://forums.asp.net/t/1344386.aspx?how to create create flipcart like panel panel shoff shoving showproducts infroducts in in gridview

相关内容

  • 没有找到相关文章

最新更新