Bonjour
Je travaille dans .Net C # WPF et je veux utiliser une ListBox avec un DataTemplate et ObservableCollection
mais je ne peux pas faire fonctionner le Binding du TextBox en Mode TwoWay, quand je modifie le texte dans la TextBox , ObservableCollection n'est
pas modifiée
Pouvez-vous m'aider? Merci d'avance
Je mets ici un exemple simplifié:
Xaml :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <DataTemplate x:Key="DataTemplate1"> <Grid Height="75" Width="650"> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefinition Height="25"/> </Grid.RowDefinitions> <Grid Grid.Row="0"> <TextBox x:Name="TextBox1" Width="400" HorizontalAlignment="Left" Text="{Binding Comment1, Mode=TwoWay,UpdateSourceTrigger=LostFocus}" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> </TextBox> </Grid> <Grid Grid.Row="1"> <TextBox x:Name="TextBox2" Width="400" HorizontalAlignment="Left" Text="{Binding Comment2, Mode=TwoWay,UpdateSourceTrigger=LostFocus}" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> </TextBox> </Grid> </Grid> </DataTemplate> </Window.Resources> <DockPanel> <Grid DockPanel.Dock="Top" Height="50" > <Button Content="Add Item" Height="23" HorizontalAlignment="Left" Name="AddItem1" VerticalAlignment="Center" Width="75" Margin="20,0,0,0" Click="AddItem1_Click"/> <Button Content="Listing" Height="23" HorizontalAlignment="Left" Name="Listing1" VerticalAlignment="Center" Width="75" Margin="150,0,0,0" Click="Listing1_Click"/> </Grid> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> <Grid HorizontalAlignment="Left" Width="500"> <ListBox x:Name="ListBox1" ItemTemplate="{StaticResource DataTemplate1}" ItemsSource="{Binding}" HorizontalAlignment="Left" BorderBrush="Transparent" Background="Transparent" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> </ListBox> </Grid> </ScrollViewer> </DockPanel> </Window>
Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public partial class MainWindow : Window { ObservableCollection<structInfos> OCInfos; public struct structInfos { public string Comment1 { get; set; } public string Comment2 { get; set; } } public structInfos _structInfos; public MainWindow() { InitializeComponent(); OCInfos = new ObservableCollection<structInfos>(); DataContext = OCInfos; } private void AddItem1_Click(object sender, RoutedEventArgs e) { _structInfos.Comment1 = "My Text1"; _structInfos.Comment2 = "My Text2"; OCInfos.Add(_structInfos); } private void Listing1_Click(object sender, RoutedEventArgs e) { int nCount = OCInfos.Count; for (int Ind1 = 0; Ind1 < nCount; Ind1++) { _structInfos = OCInfos[Ind1]; Console.WriteLine(""); Console.WriteLine(_structInfos.Comment1); Console.WriteLine(_structInfos.Comment2); } } }
Partager