2011-03-16 3 views
0

WPF 응용 프로그램에 MVP 패턴을 사용하고 있습니다. ObjectDataProvider를 내 View의 생성자에서 설정 한 Presenter 객체로 설정하고 싶습니다. 그런 다음 발표자 속성에 대한 제 컨트롤에 바인딩하고 싶습니다.ObjectDataProvider를 뷰의 속성으로 설정하십시오.

내가 이렇게 내 ObjectDataProvider를 정의 :

<Window.Resources> 
    <ObjectDataProvider x:Key="pres" ObjectType="{x:Type local:MyPresenter}"/> 
</Window.Resources> 
<Grid DataContext="{Binding pres}" > 
    <ComboBox Name="_fileTypes" SelectedValuePath="Key" DisplayMemberPath="Value" 
       ItemsSource="{Binding Path=FileType}"/> 
</Grid> 

public partial class MyView : Window 
{ 
    public ViewPresenter MyPresenter { get; set; } 
    public Dictionary<int, string> FileNames { get; private set; } 

    public MyView() 
    { 
     InitializeComponent(); 
     this.ViewPresenter = new MyPresenter(this, (IService)ObjectFactory.GetInstance<IService>()); 
     this.FileType = GetFileTypes(); 
    } 
} 

는 불행하게도 ObjectDataProvider이 올바르게 설정하지 않는 것 내 콤보 상자는 비어 있고 나는 this.Resources을 [검사 할 때 "pres"] 얻을 수 :

{System.Windows.Data.ObjectDataProvider} 
base {System.Windows.Data.DataSourceProvider}: {System.Windows.Data.ObjectDataProvider} 
ConstructorParameters: Count = 0 
IsAsynchronous: false 
MethodName: null 
MethodParameters: Count = 0 
ObjectInstance: null 
ObjectType: {Name = "MyPresenter" FullName = "Test.Presenters.MyPresenter"} 

어떻게 내 ObjectDataP를 올바르게 정의해야합니까? MyView의 MyPresenter 속성을 사용하려면 rovider를 사용 하시겠습니까? 나는 일반적으로 뷰의 데이터 컨텍스트를 설정

<Grid DataContext="{Binding {StaticResource Presenter}}" /> 

답변

0

: 자원에 결합하기 위해

+0

완벽하게 작동했습니다. - James에게 감사드립니다. – openshac

0

, 당신은 다음 구문을 사용합니다.

publiv MyView() { this.DataContext = new Model(); }

클래스 모델 { 공공 INT의 SomeProperty {얻을; 설정;} }

이 다음과 같은 모델의 속성에 바인딩 할 수있는 것입니다;

+0

난 당신 말은 생각 : <그리드의 DataContext =/"{바인딩 소스 = {정적 리소스를 대가}}"> 나는 아직도 운을 시도,하지만. 문제는 View에서 Property ViewPresenter를 사용하는 대신 새로운 객체를 인스턴스화하는 것입니다. – openshac

관련 문제