Coucou,
J'ai cherché quelques solution sur le net, mais aucune n'a fonctionné, je dois oublier quelque chose, c'est pourquoi je demande votre aide.
Voici mon problème :
J'ai une MainView sur laquelle j'ai placé ce ComboBox :
J'ai lié sa source coté code Behind, d'un ObservableCollection<PersonnageItem>
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
29 <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Model/DictionaryAltered.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <ComboBox x:Name="cbTitle" Grid.Row="1" MaxDropDownHeight="260" ToolTip="{Binding CurrentPersonnage.Illustrateur}" Style="{DynamicResource ComboBoxStyleTitre}" ItemTemplate="{StaticResource templateComboTitre}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="14" FontWeight="Bold" Foreground="White" Grid.Column="2" SelectionChanged="cbTitle_SelectionChanged" Margin="49,5,0,0" Height="30" > <ComboBox.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Black" Opacity="0.3" /> </ComboBox.Resources> </ComboBox>
Son template est défini dans un ResourceDictionary :
Code : Sélectionner tout - Visualiser dans une fenêtre à part cbTitle.ItemsSource = TitrePersonnage.Instance().PersonnageItems;
Le problème se situe sur la commande du bouton :
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 <DataTemplate x:Key="templateComboTitre" > <Grid Height="22"> <Grid> <Grid.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Offset="0.0" Color="{Binding Faction, Converter={StaticResource FactionToColorConverter}}"/> <GradientStop Offset="1.0" Color="{Binding OOF, Converter={StaticResource FactionToColorConverter}}"/> </LinearGradientBrush> </Grid.Background> <TextBlock x:Name="txtPersonnageNom" VerticalAlignment="Center" Panel.ZIndex="0" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" Text="{Binding NomString}"></TextBlock> </Grid> <Grid Width="270"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Image x:Name="imgPersonnageFaction" Margin="2" Grid.Column="0" HorizontalAlignment="Left" Source="{Binding Path=FactionImagePath}" /> <Button x:Name="btnPersonnageFaction" Command="{Binding DataContext.SelectFactionCommand, RelativeSource={RelativeSource AncestorType=vm:MainViewModel}}" Grid.Column="1" BorderThickness="0" Background="Transparent" /> <Button x:Name="btnPersonnageOOF" Grid.Column="2" BorderThickness="0" Background="Transparent" /> <Image x:Name="imgPersonnageOOF" Margin="2" Grid.Column="3" HorizontalAlignment="Right" Source="{Binding Path=OOFImagePath}" /> </Grid> </Grid> </DataTemplate>
Dans mon MainViewModel j'ai la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <Button x:Name="btnPersonnageFaction" Command="{Binding DataContext.SelectFactionCommand, RelativeSource={RelativeSource AncestorType=vm:MainViewModel}}" Grid.Column="1" BorderThickness="0" Background="Transparent" />
Avec une liaison entre MainView et MainViewModel dans le constructeur MainView()
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 #region Command private ICommand selectFactionCommand; public ICommand SelectFactionCommand { get { if (selectFactionCommand == null) { selectFactionCommand = new RelayCommand( param => this.SelectFaction(), param => this.CanSelectFaction() ); } return selectFactionCommand; } } private bool CanSelectFaction() { return true; } private void SelectFaction() { //ToDo } #endregion
J'ai mis un point d'arrêt sur //ToDo mais je n'atteint jamais cette partie du code lorsque je déroule le Combobox puis clic sur le bouton qui contient la commande bindé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public static MainViewModel vm; vm = new MainViewModel(); DataContext = vm;
Merci pour votre aide à ce propos
Partager