Bonjour à tous,

Je travaille sur une application WPF, en respectant le design pattern MVVM.

En temps normal, j'arrive sans problème à récupérer les "Content" des boutons (valeur inscrite dans le bouton) grâce au binding twoWay.

Seulement dans mon projet j'ai créé une grille de bouton au travers d'un datatemplate.
J'arrive à lancer des commandes à partir de cette grille de bouton, cependant il y a une donnée que je n'arrive pas a récupérer c'est la valeur du "Content" du bouton dans ce cas.
(Le content du bouton correspond à la propriété "Text" du TextBlock encapsulé)

Auriez-vous une idée sur laquelle m'aiguiller ?

Voici le code XAML de la Vue(contenant la grille) :
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
23
24
25
26
27
<Grid Background="{StaticResource ResourceKey=BackgroundColor}">
        <ItemsControl Grid.Row="0" Grid.Column="0" ItemsSource="{Binding ReworkQuantityListSource}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="{Binding NumberColumn}"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
 
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
 
                        <Button Margin="10,10,10,10" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.WriteCommand}">
                            <TextBlock x:Name="TextButton" Grid.Row="1" Text="{Binding ReworkName, Mode=TwoWay}"/>
                        </Button>
 
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>


Voici le code du Vue-Model :
Code : 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
public class SaisieViewModel : ObservableObject
    {
        public ICommand WriteCommand { get; set; }
 
        public ObservableCollection<ReworkQuantityModel> ReworkQuantityListSource { get; set; }
 
        public string NumberColumn { get; set; }
 
        public SaisieViewModel()
        {
            WriteCommand = new RelayCommand(Do_WriteData);
 
            ReworkQuantityListSource = new ObservableCollection<ReworkQuantityModel>();
 
            ReworkQuantityModel _typeRework = new ReworkQuantityModel();
            foreach (ReworkQuantityModel data in _typeRework.ListTypeRework())
            {
                ReworkQuantityListSource.Add(data);
            }
 
            NumberColumn = Math.Ceiling(Math.Sqrt(ReworkQuantityListSource.Count())).ToString();
        }
 
        public void Do_WriteData(object obj)
        {
            MessageBox.Show("test");
        }
    }
Si dessous également le code du modèle de données :
Code : 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
public class ReworkQuantityModel : ObservableObject
    {
        List<ReworkQuantityModel> _reworkList;
 
        public string ReworkName {get; set;}
 
        public ReworkQuantityModel()
        {
        }
 
        public List<ReworkQuantityModel> ListTypeRework()
        {
            _reworkList = new List<ReworkQuantityModel>();
 
            //TODO : Création fichier .xml/.txt (à voir) pour stocker les données
            _reworkList.Add(new ReworkQuantityModel() { ReworkName = "Retouche 1" });
            _reworkList.Add(new ReworkQuantityModel() { ReworkName = "Retouche 2" });
            _reworkList.Add(new ReworkQuantityModel() { ReworkName = "Retouche 3" });
            _reworkList.Add(new ReworkQuantityModel() { ReworkName = "Retouche 4" });
            _reworkList.Add(new ReworkQuantityModel() { ReworkName = "Retouche 5" });
 
            return _reworkList;
        }
    }
Concernant la commande, j'utilise la classe RelayCommand qui n'est plus à présenter.