2011-01-20 3 views
1

ObjectDatatProvider를 사용하여 생성되는 개체의 생성자에 기존 개체 인스턴스를 매개 변수로 전달하려고합니다. 이것은 항상 내 객체가 하나 개의 매개 변수를 생성자에도 불구하고, 주어진 예외와 함께 실패 여기 WPF의 ObjectDataProvider에 기존 개체 인스턴스를 생성자 매개 변수로 전달

System.Windows.Data Error: 34 : ObjectDataProvider cannot create object; Type='VegaViewModel'; Error='Wrong parameters for constructor.' MissingMethodException:'System.MissingMethodException: Constructor on type 'WpfApplication1.VegaViewModel' not found. at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Windows.Data.ObjectDataProvider.CreateObjectInstance(Exception& e)'

내 XAML입니다 :

<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaModel}" MethodName="Sample" x:Key="VegaPnlData"/>  
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel"> 
       <ObjectDataProvider.ConstructorParameters> 
        <ObjectDataProvider ObjectInstance="{StaticResource VegaPnlData}"/> 
       </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider> 

나는이 XAML을 사용하는 경우 저도 같은 오류로 얻을 잘 :

public class VegaViewModel 
{    
    public VegaViewModel(VegaModel vegaPnl) 
    { 
     VegaPnl = vegaPnl;   
    } 

    public VegaModel VegaPnl { get; set; }    
} 
: 여기
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel"> 
      <ObjectDataProvider.ConstructorParameters> 
       <StaticResource ResourceKey="VegaPnlData"/> 
      </ObjectDataProvider.ConstructorParameters> 
     </ObjectDataProvider> 

는 VegaViewModel 클래스의 코드는
+0

왜이 작업을 수행하려고합니까? –

답변

0

ObjectDataProviderConstructorParameters을 통해 전달할 수 없습니다. Dr. WPF adequately states 같은 이유 ...

An ObjectDataProvider (ODP) is designed to be used with a Binding. If you use it outside of the context of a binding, you end up refering to an instance of the ODP rather than the dereferenced object that it "provides".

귀하의 프레임 워크 설계에 의해 허용하지 않습니다 뭔가를하려고합니다.

+0

그래서 어떻게 메서드의 결과에 바인딩하고 그것을 생성자에 대한 매개 변수로 사용합니까? –

+0

만약 내가 다음과 같은 예외를 여전히 얻을 : –

+0

@ user583337 당신은 현재 구현에서 할 수 없습니다. Dr. WPF가 당신에게 적합한 대안을 제공함에 따라 내가 게시 한 링크를 확인하십시오. 이 모든 것을 XAML로 밀어 넣는 것은 정직하기는 다소 이상합니다 ... 그러나 당신은 그것을 할 타당한 이유가 있다고 가정합니다. –

관련 문제