C# WPF,使用XAML'中的参数调用方法;s级
我的XAML中有一个C# WPF,使用XAML'中的参数调用方法;s级,c#,wpf,xaml,stack-overflow,objectdataprovider,C#,Wpf,Xaml,Stack Overflow,Objectdataprovider,我的XAML中有一个ObjectDataProvider,它引用了我的窗口中的一个方法。也就是说,我有NewForm.xaml.cs类NewForm,并且NewForm.xaml中的ObjectDataProvider引用了NewForm中的方法。目前,使用以下XAML,我得到了一个堆栈溢出错误,因为NewForm构造函数不断地被调用: <Window x:Class="MyNamespace.NewForm" ...> <Window.Resources> <Ob
ObjectDataProvider
,它引用了我的窗口中的一个方法。也就是说,我有NewForm.xaml.cs
类NewForm
,并且NewForm.xaml
中的ObjectDataProvider
引用了NewForm
中的方法。目前,使用以下XAML,我得到了一个堆栈溢出错误,因为NewForm
构造函数不断地被调用:
<Window x:Class="MyNamespace.NewForm" ...>
<Window.Resources>
<ObjectDataProvider x:Key="getTeamName"
ObjectType="{x:Type local:NewForm}"
MethodName="GetTeamName">
<ObjectDataProvider.MethodParameters>
<sys:Int32>-1</sys:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
</Window>
-1
我猜这是因为ObjectType
被设置为NewForm
,所以它加载NewForm
来加载我的应用程序,但是它必须创建NewForm
的新实例才能调用GetTeamName
,但是构造函数调用InitializeComponent
,这将创建一个新的NewForm
,它必须创建一个新的NewForm
来调用GetTeamName
。。。它实际上每次都会使VisualStudio2010崩溃
无论如何,我要问的是,我是否必须定义XAML在其他类中通过ObjectDataProvider
s调用的方法?或者我可以通过某种方式将ObjectDataProvider
与XAML类中定义的方法一起使用吗?或者要在我的XAML类中调用一个方法,除了ObjectDataProvider
,我应该使用其他XAML吗?似乎我无法将我的C#方法放在另一个类中,因为它使用TryFindResource
从我的XAML获取XmlDataProvider
。这里的问题根源在于ObjectDataProvider
总是为它创建的任何对象创建一个新实例。是的,它将创建一个NewForm
类的实例,其构造函数将实例化另一个ObjectDataProvider
,它将创建一个NewForm
类的实例,然后它就是海龟
但问题是,ObjectDataProvider
实际上只是一种在XAML中声明创建对象并对其调用方法的方法,因此您不必在代码隐藏中执行。因为您已经在代码隐藏中创建了对象,所以避免代码隐藏对您没有好处。因此,只需让创建对象的方法也将其添加到窗口的资源字典:
// this method no longer needs to return anything, so you can change its signature
private void GetTeamName()
{
// code that creates the object goes here.
// and now, instead of "return myObject", do this:
Resources.Add("getTeamOName");
}