Xaml et data binding [Résolu]

nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 25 mars 2014 à 10:10 - Dernière réponse : nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Whismeril 12111 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 25 mars 2014 à 22:38
0
Merci
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.
Commenter la réponse de Whismeril
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 26 mars 2014 à 09:59
0
Merci
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)
Commenter la réponse de nagaD.scar
Whismeril 12111 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 26 mars 2014 à 15:28
0
Merci
J'ai posé la question à un des mes collégues et il me confirme qu'avec PropertyChange ça devrait fonctionner
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 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
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 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 ><
Commenter la réponse de Whismeril
nagaD.scar 4269 Messages postés samedi 8 septembre 2007Date d'inscription 29 août 2018 Dernière intervention - 27 mars 2014 à 16:13
0
Merci
      
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
Commenter la réponse de nagaD.scar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.