Xaml et data binding

Résolu
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
- 25 mars 2014 à 10:10
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
- 27 mars 2014 à 16:13
salut à tous,

Je sèche sur un problème probablement tout bête concernant le binding.
Montrer tout mon code serai je pense fastidieux, donc j'aurai seulement une question : comment informer ma page que mon élément binder est à récupérer ?

La déclaration de mon ObservableCollection :

public ObservableCollection<Model.Transaction> TransactionsVue
{
get { return new ObservableCollection<Model.Transaction>(Personnes[idUserVue].lTransaction); }
set { }
}
l'édition de mon élément : (si besoin d'expliquer demandez, mais ca me semble compréhensible)


public void addTransactionPersonneVue(Model.Transaction transaction)
{
Personnes[idUserVue].addTransact(transaction);
TransactionsVue = new ObservableCollection<Model.Transaction>(Personnes[idUserVue].lTransaction);
}

et mon bind :

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox Name="ListeOperation" ItemsSource="{Binding TransactionsVue}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding nom}" Margin="20 0 0 0" />
<TextBlock Text="{Binding date}" Margin="20 0 0 0" />
<TextBlock Text="{Binding debitcredit}" Margin="20 0 0 0" />
<TextBlock Text="{Binding sMontant}" Margin="20 0 0 0" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Name="btnAdd" Height="72" Content="ajouter" Command="{Binding AddTransClickCommand}" />
</Grid>
Mon datacontext étant lié dans l'initialisation de ma page.

au chargement, mes données s'affichent, mais les ajouts ne mettent pas à jours ma liste (alors que mon objet est bien à jours lui).

Qu'est ce que je rate ? (je débute le binding et j'ai un peu de mal à trouver de bonnes explications)

merci d'avance.
naga

4 réponses

Whismeril
Messages postés
17482
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
3 juillet 2022
600
25 mars 2014 à 22:38
Bonsoir, je n'y connais pas grand chose en WPF, mais il me semble que tu dois implémenter IPropertyChange dans tes classes de données.
0
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
26 mars 2014 à 09:59
oui j'ai bien pensé justement à "comment ma modif notifie mon changement ?" mais c'est normalement géré par ObservableCollection.

J'ai une page de base où je peux créer un utilisateur et là pas de problèmes :
déclaration :


public ObservableCollection<Model.Personne> Personnes { get; set; }

l'édition de mon élément (intégré à une popup):


private void btnCreate_Click(object sender, RoutedEventArgs e)
{
string newUserName = textNomCreate.Text;

var newPersonne = new Personne(newUserName, true);
var Personnes = ViewModelLocator.MainPageViewModel.Personnes;

if (Personnes.Contains(newPersonne))
{
MessageBox.Show(newUserName + " est déjà éxistant");
}
else
{
Personnes.Add(newPersonne);
}
LayoutRoot.IsOpen = false;
}

et le bind :


<ListBox Name="listPersonnes" ItemsSource="{Binding Personnes}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding name}" Margin="20 0 0 0" />
<TextBlock Text="{Binding actual}" Margin="20 0 0 0" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

et là ca fonctionne bien ...
J'ai un peu de mal à appréhender le binding, j'ai envie justement de mettre moi même mes listes à jours et porter mes éléments, mais l'outil existe donc je m'efforce de l'utiliser ^^ (même si c'est trèès tentant =p)
0
Whismeril
Messages postés
17482
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
3 juillet 2022
600
26 mars 2014 à 15:28
J'ai posé la question à un des mes collégues et il me confirme qu'avec PropertyChange ça devrait fonctionner
0
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
26 mars 2014 à 17:24
ca marche, demain je m'orienterai dans ce sens (pas eu le temps au taff aujourd'hui ><).

Si je trouve je te redis ;)

merci
0
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
27 mars 2014 à 15:41
donc j'ai bien vérifier, ObservableCollection hérite de IPropertyChange et gère l'événement.

j'ai du rater autre chose mais je vois pas ><
0
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
27 mars 2014 à 16:13
      
private ObservableCollection<Model.Transaction> _transactionsVue { get; set; }
public ObservableCollection<Model.Transaction> TransactionsVue
{
get { return _transactionsVue; }
set { _transactionsVue = value; }
}

c'était ca, il fallait qu'il soit interfacé.

naga
0