Je suis en train de concevoir un contrôle utilisateur WPF qui contient d'autres contrôles utilisateur (imaginez un WidgetContainer, contenant différents Widgets) - en utilisant l'architecture M-V-VM. Pendant le développement, j'ai WidgetContainerView dans une fenêtre, la fenêtre (View) engendre un WidgetContainerViewModel comme ressource, et dans un constructeur sans paramètre de WidgetContainerViewModel, je remplis sa collection exposée avec quelques exemples de widgets (WidgetViewModels).Conception de WPF UserControl qui obtient son DataContext à partir des contrôles externes: Comment avoir des exemples de données dans le concepteur mais utiliser un contrôleur de domaine hérité au moment de l'exécution?
Le contrôle WidgetContainer hérite de la fenêtre DataContext, et à l'intérieur, il y a un ListView, qui lie Widgets au contrôle WidgetView (qui se trouve dans ListView.ItemTemplate). Maintenant, cela fonctionne correctement dans mon WindowView, car je vois mes exemples de widgets, mais une fois que j'ai édité le WidgetContainerView ou WidgetView, il n'y a pas de contenu - au moment de la conception, les contrôles sont autonomes et n'héritent aucun DataContext, donc je ne vois pas de contenu, et j'ai du mal à les concevoir (un ListView est vide, les champs de Widget aussi ...).
J'ai essayé d'ajouter un widget échantillon à la WidgetView:
public partial class WidgetView : UserControl
{
public WidgetView()
{
InitializeComponent();
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
//btw, MessageBox.Show(...) here sometimes crashes my Visual Studio (2008), but I have seen the message - this code gets executed at design time, but with some lag - I saw the message on reload of designer, but at that time, I have already commented it - wtf?
this.DataContext = new WidgetViewModel(); //creates sample widget
}
}
}
mais cela ne fonctionne pas - je ne vois toujours pas quoi que ce soit dans le concepteur.
Je voulais aussi créer un WidgetViewModel comme ressource dans WidgetView, comme ceci:
<UserControl x:Class="MVVMTestWidgetsControl.View.WidgetView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="WidgetViewModel" //this doesn't work!
Height="Auto" Width="Auto">
<UserControl.Resources>
<ResourceDictionary>
<ViewModel:WidgetViewModel x:Key="WidgetViewModel" />
</ResourceDictionary>
</UserControl.Resources>
<TextBlock Text="{Binding Path=Title}"></TextBlock>
</UserControl>
mais je ne sais pas comment assigner un WidgetViewModel comme DataContext d'un widget tout - je ne peux pas Ajoutez l'attribut DataContext à UserControl, car WidgetViewModel est défini plus tard dans le code. Des idees pour faire cela? Je pourrais utiliser un échantillon de données de cette façon, et juste le remplacer dans le code afin qu'il ait le bon contenu à l'exécution ...
Quelles sont vos meilleures pratiques lors du développement de contrôles utilisateur? Merci, concevoir un contrôle vide n'est pas amusant :)).
Merci, cela a bien fonctionné (même si je préfère préfère une solution qui ne changerait pas du tout programme lors de l'exécution). –