Domanda

Sto usando il modello MVP per la mia applicazione WPF. Vorrei impostare l'ObjectDataProvider ad essere l'oggetto del presentatore che l'impostazione nel costruttore della mia vista. Ho poi vorrei associare ai miei controlli alle proprietà del presentatore.

Ho definito il mio ObjectDataProvider in questo modo:

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

e

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

Purtroppo l'ObjectDataProvider non sembra essere impostato correttamente, il mio ComboBox è vuoto e quando ho ispezionare this.Resources [ "pres"] ottengo:

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

Come dovrei correttamente definire il mio ObjectDataProvider di utilizzare la proprietà MyPresenter del mio punto di vista?

È stato utile?

Soluzione

Io di solito impostato contesto dati della vista.

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

classe del modello { int SomeProperty pubblico {get; set;} }

Questo sarebbe quindi consentire di associare alle proprietà del modello come questo;

Altri suggerimenti

Per legano a una risorsa, è necessario utilizzare la seguente sintassi:

<Grid DataContext="{Binding {StaticResource Presenter}}" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top