Récupération "Content" button dans ViewModel à travers DataTemplate
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:
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:
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:
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.