Pregunta

Estoy usando el patrón MVP para mi aplicación WPF. Me gustaría establecer el ObjectDataProvider para que sea el objeto presentador que estoy configurando en el constructor de mi vista. Entonces me gustaría unir a mis controles a las propiedades del presentador.

He definido mi ObjectDataProvider así:

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

y

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();
    }
}

Desafortunadamente, el ObjectDataProvider no parece estar configurado correctamente, mi comboBox está vacío y cuando inspecciono esto. RESOURES ["Pres"] Obtengo:

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

¿Cómo debo definir correctamente mi ObjectDataProvider para usar la propiedad MyPresenter de mi vista?

¿Fue útil?

Solución

Normalmente establezco el contexto de datos de la vista.

public myView () {this.datacontext = new Model (); }

Modelo de clase {public int SomeProperty {get; set;}}

Esto le permitiría unirse a propiedades en el modelo como este;

Otros consejos

Para vincularse a un recurso, debe usar la siguiente sintaxis:

<Grid DataContext="{Binding {StaticResource Presenter}}" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top