Bonjour,
Je développe une application type lecteur windows média dans le cadre de mes études, et je suis confronté à un problème de binding de mes informations. Je travaille sous le pattern MVVM.
Voici le code XAML de la fenêtre :
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <Window x:Class="WMP2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WMP2.ViewModel" Title="MainWindow" Loaded="Window_Loaded" MinWidth="525" MinHeight="350" WindowStartupLocation="CenterOwner" Background="Black" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="350" Width="525"> <Window.Resources> <Grid> ... ... <TextBox Text="{Binding playerSourceAcc}" Height="23" HorizontalAlignment="Left" Margin="16,216,0,0" Name="textBox1" VerticalAlignment="Top" Width="120"> <TextBox.DataContext> <local:PlayerViewModel/> </TextBox.DataContext> </TextBox> ... ... </Grid> </Window>
Comme vous l'aurez compris, j'ai retiré une partie du code, car il est vraiment long, pour ne laisser que l'essentiel.
J'ai donc du binding sur une textBox où je voudrais afficher du texte.
La classe MVVM qui correspond est la suivante :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 namespace WMP2.ViewModel { class PlayerViewModel : INotifyPropertyChanged { public String playerSource { get; set; } public String playerSourceAcc { get { return this.playerSource; } set { if (this.playerSource != value) { this.playerSource = value; if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs("playerSourceAcc")); Console.WriteLine("Nouvelle valeur : -----> " + this.playerSource); } } } public PlayerViewModel() { this.playerSource = "C:\\Users\\Quentin\\Videos\\ET - Katy Perry (Cover by Tiffany Alvord).mp4"; this.playCMD = new btnPlayCommand(new Action(() => { this.playerSourceAcc = "toto"; })); } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion } }
La source du binding est donc l'accesseur playerSourceAcc. J'ai un bouton dans ma vue, qui utilise une commande personnalisée. Lorsque je clique dessus, je change la valeur de playerSource à "toto" via le playerSourceAcc. Seul problème, rien ne change dans ma vue (ma textbox affiche toujours le texte original).
Voyez vous un problème là dedans ?
Merci d'avance à tous ceux qui pourront m'aider (et aux autres !) !
Partager