0

ObjectDataProviderXAML に、派生クラスのメソッドを参照する がありますWindow。つまり、NewForm.xaml.cswith クラスがNewFormあり、ObjectDataProviderinNewForm.xamlは in のメソッドを参照していNewFormます。NewForm現在、次の XAML では、コンストラクターが何度も呼び出され続けるため、スタック オーバーフロー エラーが発生します。

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

ObjectTypeが に設定されているためだと思いますので、アプリケーションをロードするNewFormためにロードしますが、 を呼び出すためにNewFormの新しいインスタンスを作成する必要がありますが、コンストラクターは、呼び出すために新しいを作成する必要がある新しいを作成する呼び出しを呼び出します...実際には毎回 Visual Studio 2010 がクラッシュします。NewFormGetTeamNameInitializeComponentNewFormNewFormGetTeamName

とにかく、私が求めているのは、XAML がObjectDataProviders を介して他のクラスで呼び出すメソッドを定義する必要があるかということです。またはObjectDataProvider、XAML のクラスで定義されたメソッドで何らかの方法で使用できますか? または、XAML のクラスでメソッドを呼び出すには、他の XAML を使用する必要がありObjectDataProviderますか? XAML からTryFindResource取得するために使用するため、C# メソッドを別のクラスに配置できるようには見えません。XmlDataProvider

4

1 に答える 1

1

ここでの問題の根本は、ObjectDataProvider作成されたオブジェクトの新しいインスタンスを常に作成することです。そうです、それはクラスのインスタンスを作成しNewForm、そのコンストラクターはクラスObjectDataProviderのインスタンスを作成する別のインスタンスをインスタンス化NewFormし、それからずっとタートルです。

しかしObjectDataProvider実際には、XAML で create オブジェクトを宣言し、メソッドを呼び出す方法にすぎないため、コード ビハインドで行う必要はありません。コード ビハインドで既にオブジェクトを作成しているため、コード ビハインドを回避してもメリットはありません。したがって、オブジェクトを作成するメソッドもウィンドウのリソース ディクショナリに追加するだけです。

// 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");
}
于 2010-08-03T18:03:28.040 に答える