Bonjour
voici mon code
fenetre
et 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
54
55
56
57
58
59
60
61 public partial class MainWindow : Window, INotifyPropertyChanged { public MainWindow() { InitializeComponent(); } #region List ObservableCollection<string> _list = null; public ObservableCollection<string> List { get { if (_list == null) { _list = new ObservableCollection<string>(); _list.Add("alpha"); _list.Add("beta"); _list.Add("gamma"); } return _list; } } #endregion #region SelectedItem private object _SelectedItem = null; public object SelectedItem { get { return _SelectedItem; } set { if (value != null && _SelectedItem != null) { if (MessageBox.Show("Autoriser le changement", "", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.No) { Application.Current.Dispatcher.BeginInvoke((Action)(() => { object o = cb.SelectedItem; cb.SelectedItem = null; cb.SelectedItem = o; }), System.Windows.Threading.DispatcherPriority.Background); //if (PropertyChanged != null) // PropertyChanged(this, new PropertyChangedEventArgs("CurrentItem")); return; } } _SelectedItem = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem")); } } #endregion public event PropertyChangedEventHandler PropertyChanged; }
ce que je voudrais faire c'est demander a l'utilisateur si on peut changer la valeur de la combo quand on passe par exemple d'"alpha" a "beta"
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 <Window x:Class="TestCombo_Chan_ge_Value.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" x:Name="win" Height="350" Width="525"> <Grid> <ComboBox x:Name="cb" ItemsSource="{Binding List, ElementName=win}" SelectedItem="{Binding SelectedItem, Mode=TwoWay, ElementName=win}" HorizontalAlignment="Left" Margin="26,32,0,0" VerticalAlignment="Top" Width="190" /> </Grid> </Window>
la solution que j'ai trouve est de mettre "Application.Current.Dispatcher.BeginInvoke" pour decaler la mise a jour
en passant par un null puis la mise a jour a la valeur reel
car je suppose que la combo met a jour dans un premier temps la propriete avant de positionner sa valeur interne
sauf qu'avace cette methode ca flash un peut puisqu'on passe vraiment a la valeur "beta" avant de revoir "alpha"
j'aimerais savoir si vous auriez pas une solution plus sexy
Partager