ObservableCollection dans une ObservableCollection WPF C#
Bonjour,
J’ai trouvé un script qui s’approche de ce que j’essaye de faire et celui-ci fonctionne comme il faut, le voici :
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| using System;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfCombo
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<string> colors = new ObservableCollection<string>();
colors.Add("white");
colors.Add("yellow");
colors.Add("red");
colors.Add("blue");
colors.Add("green");
ObservableCollection<Voitures> voitures = new ObservableCollection<Voitures>();
voitures.Add(new Voitures("Kia Rio", colors, "white"));
voitures.Add(new Voitures("Kia Sportage", colors, "yellow"));
voitures.Add(new Voitures("Kia Cee'd", colors, "red"));
voitures.Add(new Voitures("Kia Optima", colors, "blue"));
voitures.Add(new Voitures("Kia Picanto", colors, "green"));
list.ItemsSource = voitures;
}
}
public class Voitures
{
public Voitures(String name, ObservableCollection<string> colors, String selectedcolor)
{
Name = name;
Colors = colors;
SelectedColor = selectedcolor;
}
public String Name
{ get; set; }
public String SelectedColor
{ get; set; }
public ObservableCollection<String> Colors
{ get; set; }
}
} |
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 29 30 31 32 33 34 35
| <Window x:Class="WpfCombo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Combo inside Listbox" Height="470" Width="400">
<Grid>
<ListBox Name="list" Margin="5" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="3" CornerRadius="5" BorderBrush="Black" BorderThickness="2">
<StackPanel>
<TextBlock Margin="2" Text="{Binding Name}" Background="{Binding ElementName=cmbColors, Path=SelectedItem}"/>
<TextBlock Margin="2" Text="{Binding SelectedColor}" Background="{Binding ElementName=cmbColors, Path=SelectedItem}"/>
<ComboBox Margin="2" Name="cmbColors" ItemsSource="{Binding Colors}" SelectedValue="{Binding SelectedColor}"
HorizontalContentAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Margin="2, 1" Fill="{Binding}"/>
<TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window> |
Mais ce que je voudrais arriver à faire, c’est ajouter un ID à colors (parce que je travaille à partir de fichier XML).
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| using System;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfCombo
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<Colors> colors = new ObservableCollection<Colors>();
colors.Add(new Colors(1, "white"));
colors.Add(new Colors(2, "yellow"));
colors.Add(new Colors(3, "red"));
colors.Add(new Colors(4, "blue"));
colors.Add(new Colors(5, "green"));
ObservableCollection<Voitures> voitures = new ObservableCollection<Voitures>();
voitures.Add(new Voitures("Kia Rio", colors, 1));
voitures.Add(new Voitures("Kia Sportage", colors, 2));
voitures.Add(new Voitures("Kia Cee'd", colors, 3));
voitures.Add(new Voitures("Kia Optima", colors, 4));
voitures.Add(new Voitures("Kia Picanto", colors, 5));
list.ItemsSource = voitures;
}
}
public class Voitures
{
public Voitures(string name, ObservableCollection<Colors> colors, int selectedcolor)
{
Name = name;
ObservableCollection<Colors> Colors = colors;
SelectedColor = selectedcolor;
}
public string Name { get; set; }
public int SelectedColor { get; set; }
}
public class Colors
{
public Colors(int idcolor, string nameColor)
{
IDColor = idcolor;
NameColor = nameColor;
}
public int IDColor { get; set; }
public string NameColor { get; set; }
}
} |
Je me doute qu'il doit y avoir quelques problèmes dans mon dernier code et j'aimerais donc, avoir le même résultat que dans le premier script.
Merci d’avance à qui pourra m’aider à avancer sur ce problème.