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 :
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
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"); } }
Concernant la commande, j'utilise la classe RelayCommand qui n'est plus à présenter.
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; } }
Partager