Bonjour,
je souhaiterais faire une liste de radiobutton, qu'elle soit bindée à une liste d'objets métiers et aussi avoir une référence bindée sur l'élement checked.
J'ai réussi à trouver une solution, mais je la trouve compliquée et je me dis qu'il doit exister des façon bien plus simples pour le faire.
J'ai été aussi obligé de relier la propriété IsSelected de la ListBox à la propriété IsChecked du RadioButton, pour pouvoir ensuite retrouver l'item checked via l'élément sélectionné dans la listbox, mais ça implique à forcément avoir l'élément checked sélectionné.
De plus, j'ai été obligé de faire une propriété Selected dans le code behind, qui "mappe" la propriété Selected de la classe MyItem, ne peut-on pas le faire directement ?
Voici mon code :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 namespace TestRadioButton { public class MyItem { public string Nom { get; set; } public static List<MyItem> Liste { get { return new List<MyItem> { new MyItem { Nom = "Item1" }, new MyItem { Nom = "Item2" }, new MyItem { Nom = "Item3" } }; } } public static MyItem Selected { get; set; } } }
Code C# : 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 namespace TestRadioButton { /// <summary> /// Logique d'interaction pour MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = this; } public MyItem Selected { get { return MyItem.Selected; } set { MyItem.Selected = value; } } private void btnTest_Click(object sender, RoutedEventArgs e) { if (MyItem.Selected == null) MessageBox.Show("Il est null"); else MessageBox.Show(MyItem.Selected.Nom); } } }
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
28
29
30
31 <Window x:Class="TestRadioButton.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:test="clr-namespace:TestRadioButton" Title="MainWindow" Height="240" Width="320"> <Window.Resources> <ObjectDataProvider x:Key="odpListe" ObjectType="{x:Type test:MyItem}" MethodName="get_Liste"/> </Window.Resources> <DockPanel> <Button Name="btnTest" Content="Test" Click="btnTest_Click" DockPanel.Dock="Bottom"/> <ListBox Name="lbOperateur" Grid.Column="1" ItemsSource="{Binding Source={StaticResource odpListe}}" SelectedItem="{Binding Selected}"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="1"/> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate> <RadioButton Content="{Binding Path=Nom}" GroupName="gOperateur" IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </DockPanel> </Window>
Merci d'avance pour vos conseils sur le sujet.
Partager