Je commence par WPF et la liaison, mais il y a un comportement étrange que je ne comprends pas.WPF Question de liaison
Exemple 1: Une forme WPF très simple, avec un seul combobox (nom = C) et le code suivant dans le constructeur:
public Window1()
{
InitializeComponent();
BindingClass ToBind = new BindingClass();
ToBind.MyCollection = new List<string>() { "1", "2", "3" };
this.DataContext = ToBind;
//c is the name of a combobox with the following code :
//<ComboBox Name="c" SelectedIndex="0" ItemsSource="{Binding Path=MyCollection}" />
MessageBox.Show(this.c.SelectedItem.ToString());
}
Pouvez-vous me expliquer pourquoi cela se bloque à cause de cela. c.SelectedItem étant NULL.
Je ... mais pas de problème, il est parce qu'il est dans le constructeur, METTONS le code dans l'événement formulaire Loaded:
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BindingClass ToBind = new BindingClass();
ToBind.MyCollection = new List<string>() { "1", "2", "3" };
this.DataContext = ToBind;
MessageBox.Show(this.c.SelectedItem.ToString());
}
Même problème this.c.SelectedItem est nul ...
Remarque: Si je supprime la chose Messagebox, alors la liaison fonctionne très bien, j'ai la valeur dans la liste déroulante. C'est comme si "un peu" de temps était nécessaire après la définition du datacontext. Mais comment savoir quand la reliure sera faite?
Je vous remercie de votre aide.
Enfer, En fait, c'est encore plus que juste l'attribut selected, c'est-à-dire null. La zone de liste déroulante réagit comme si elle n'était pas du tout liée (les éléments étant également null). Était curieux parce que cela fonctionne dans Silverlight 3 – Fabian
Oui, n'a pas pris la peine de vérifier que: P. Un peu bizarre que cela fonctionne dans silverlight mais pas dans wpf. Peut-être qu'ils ont une manière différente de charger les contrôles. J'ai vérifié OnContentRendered et MyCollection a été défini avant de rendre le contrôle lui-même. Je n'ai pas le temps de regarder plus loin mais le réflecteur .g est un excellent outil pour voir ce qui se passe dans le framework .net. Aidé m'a trouvé beaucoup de choses étranges avec WPF. Désolé pour la mauvaise réponse, mais j'espère que vous jetez un oeil à MVVM comme un très bon modèle pour développer des applications WPF. – Michael
Tx vous Michael, je passe d'un projet de Silverlight 3 à WPF, au premier coup d'oeil ça semble assez facile, mais ils sont vraiment méchants d'étranges différences entre eux qui rendent la chose assez compliquée! :) – Fabian