J'ai une collection observable liée à une zone de liste dans WPF. L'une des options de la fenêtre consiste à utiliser un OpenFileDialog pour ajouter un élément à la liste avec certaines propriétés. Lorsque j'utilise OpenFileDialog, il définit deux des propriétés du nouvel élément dans la collection observable. J'utilise INotifyPropertyChanged pour mettre à jour la liste. Ces deux nouvelles propriétés sont définies correctement et maintenant la liste doit afficher le titre contenu dans la nouvelle propriété de titre et la zone de texte de titre qui est liée à la liste doit également afficher le nouveau titre. Cependant, ni affiche le nouveau titre à la fermeture de l'OpenFileDialog et quand je clique sur un autre élément dans la liste et revenez à l'élément que je viens de modifier met à jour la zone de texte titre, mais le titre affiché dans la zone de liste Je déplace l'élément dans la zone de liste que je veux changer.La liaison WPF ne se met pas à jour avant une autre action
Voici le code de liaison.
ItemsSource="{Binding Path=MyData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Et voici la mise en œuvre du bouton de navigation qui ne fonctionne pas (L1 étant la zone de liste)
private void browse_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog opf = new OpenFileDialog();
opf.ShowDialog();
MyData[L1.SelectedIndex].Title = System.IO.Path.GetFileNameWithoutExtension(opf.FileName);
MyData[L1.SelectedIndex].Command = opf.FileName;
}
Lorsque je tape simplement dans les zones de texte et cliquez sur eux, il met à jour la liste boîte immédiatement avec les nouvelles informations que j'ai mis. J'ai aussi un bouton créer et en cliquant dessus, il ajoute immédiatement un nouvel élément à la liste et met à jour ses propriétés. Le seul qui ne se met pas à jour correctement est ce morceau de code que je vous ai donné. Merci de votre aide.
EDIT:
Voici ma mise en œuvre de INotifyPropertyChanged
private OCLB _MyData;
public OCLB MyData
{
get
{
return _MyData;
}
set
{
_MyData= value;
FirePropertyNotifyChanged("MyData");
}
}
OCLB est la collection observable. Voici la fonction FirePropertyNotifyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyNotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Chacun d'entre eux sont dans la classe MainWindow partielle pour la forme WPF. J'ai aussi une classe pour les fichiers MyData (avec 4 get/set) qui sont stockés dans l'OCLB (collection observable). Il y a aussi une classe avec des fonctions pour l'OCLB.
J'ai ajouté ma mise en œuvre de INotifyPropertyChanged à ma question initiale maintenant si je peux trouver ce qui ne va pas avec elle. – mjstide
MyData semble être votre collection. La classe contenant les propriétés "Title" et "Command" nécessite le traitement INotifyPropertyChanged. – SergioL
Je désérialise un XML vers un conteneur. Ce conteneur est MyData. MyData est une ObservableCollection. MyClass contient les propriétés title et command. Voulez-vous dire que j'ai besoin de mettre les fonctions INotifyPropertyChanged dans MyClass? Ou dois-je changer pour un INotifyCollectionChange? –
mjstide