Set ObjectDataProvider être la propriété de la vue
-
25-10-2019 - |
Question
J'utilise le modèle de MVP pour mon application WPF. Je voudrais mettre l'ObjectDataProvider être l'objet Présentateur que je paramètre dans le constructeur de mon point de vue. Je voudrais ensuite lier à mes contrôles aux propriétés du présentateur.
Je l'ai défini mon ObjectDataProvider comme ceci:
<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>
et
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();
}
}
Malheureusement, le ObjectDataProvider ne semble pas être correctement réglée, mon ComboBox est vide et quand je visite this.Resources [ « pres »] je reçois:
{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"}
Comment dois-je définir correctement mon ObjectDataProvider à utiliser la propriété MyPresenter de mon point de vue?
La solution
Normalement, je mis le contexte des données de la vue.
publiv MyView () { this.DataContext = nouveau modèle (); }
Modèle de classe { SomeProperty public int {get; set;} }
Cela vous permettra de lier les propriétés du modèle comme celui-ci;
Autres conseils
Afin de se lier à une ressource, vous devez utiliser la syntaxe suivante:
<Grid DataContext="{Binding {StaticResource Presenter}}" />