Bonjour à tous,
Je développe une application en WPF et une erreur ralentit le fonctionnement de celle ci.
J'ai une listeview avec notamment des elements que j'ai créé :
et dans les éléments que j'éi crée j'ai fais des dépendency properties.
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 <!--Liste des études--> <ListView Grid.Row="2" ItemsSource="{Binding LsEtudesOpe}" Name="_lv_lsEtudes" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> <ListView.ItemTemplate> <DataTemplate> ... <!--Résumé du tube GathersCDP2D--> <ctrl:ResumeTubeOpe Grid.Column="1" Tube="{Binding DataContext.GathersCDP2D, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" IDE="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" OuvertureDetail="{Binding DataContext.OuvertureDetail, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/> ... <!--Détails d'un tube--> <ctrl:DetailTubeOpe Grid.Row="1" Tube="{Binding DataContext.TubeSelectionne, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}"/> ... </DataTemplate> </ListView.ItemTemplate> </ListView>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public ResumeTubeOpe() { this.DataContext = _ctrl; InitializeComponent(); DependencyPropertyDescriptor.FromProperty(TubeProperty, typeof(ResumeTubeOpe)). AddValueChanged(this, new EventHandler((sender, e) => _ctrl.Tube = Tube)); }Et il me semble que c'est depuis que j'ai rajouté ces dependency property que ces erreurs sont apparues :
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 /// <summary> /// Obtient ou définit le tube résumé /// </summary> public SuiviTubeOpe Tube { get { return base.GetValue(TubeProperty) as SuiviTubeOpe; } set { base.SetValue(TubeProperty, value); } } /// <summary> /// Définit la propriété Tube comme étant une DependencyProperty /// Cela permet à cette propriété d'être reconnue dans le xaml /// </summary> public static readonly DependencyProperty TubeProperty = DependencyProperty.Register("Tube", typeof(SuiviTubeOpe), typeof(ResumeTubeOpe));
le programme fonctionne correctement si ce n'est que l'exécution est ralentie par celles-ci.System.Windows.Data Error: 23 : Cannot convert '{DisconnectedItem}' from type 'NamedObject' to type 'Client2GWCF.DIO.SuiviIDEOpe' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: Conversion de TypeConverter impossible à partir de MS.Internal.NamedObject.
à System.ComponentModel.TypeConverter.GetConvertFromException(Object value)
à System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
à MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
System.Windows.Data Error: 6 : 'ObjectSourceConverter' converter failed to convert value '{DisconnectedItem}' (type 'NamedObject'); fallback value will be used, if available. BindingExpressionath=DataContext; DataItem='Grid' (Name=''); target element is 'ResumeTubeOpe' (Name=''); target property is 'IDE' (type 'SuiviIDEOpe') NotSupportedException:'System.NotSupportedException: Conversion de TypeConverter impossible à partir de MS.Internal.NamedObject.
à MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
à MS.Internal.Data.ObjectSourceConverter.Convert(Object o, Type type, Object parameter, CultureInfo culture)
à System.Windows.Data.BindingExpression.ConvertHelper(IValueConverter converter, Object value, Type targetType, Object parameter, CultureInfo culture)'
Je ne sais pas exactement sur quelle ligne de code elles sont levées... ça doit être lors de l'affichage des objets dans ma liste...
Lors du premier remplissage de ma liste les erreurs n'apparaissent pas donc je suppose que ce sont des "fantomes" des anciens objet contenus dans cette liste qui posent problème; d'où le '{DisconnectedItem}'...
Il y a autant d'erreur que j'ai de ResumeTubeOpe présents dans ma liste donc c'est surement lié à ce dernier. En voici le xaml :
Si quelqu'un a une idée...
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
62
63 <UserControl x:Class="Client2GWCF.Vue.ResumeTubeOpe" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:converter="clr-namespace:Client2GWCF.Converter" mc:Ignorable="d" d:DesignHeight="80" d:DesignWidth="120"> <UserControl.Resources> <converter:StatutTubeToBrush x:Key="StatutTubeToBrush"/> <converter:StatutProcessToBrush x:Key="StatutProcessToBrush"/> <converter:BoolToReverseVisibility x:Key="BoolToReverseVisibility"/> <converter:BoolToVisibility x:Key="BoolToVisibility"/> </UserControl.Resources> <Button Grid.Column="0" Background="{Binding Tube.Statut, Converter={StaticResource StatutTubeToBrush}}" IsEnabled="{Binding Tube.TubeExiste}" Name="_btn_ResumeTube" Click="_btn_ResumeTube_Click"> <Grid Width="100"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition Height="14"/> </Grid.RowDefinitions> <!--Nom du tube--> <TextBlock Grid.Row="0" Text="{Binding Tube.NomTube}" FontSize="12" TextAlignment="Center"/> <!--Nombre d'Ax théorique--> <DockPanel Grid.Row="1" HorizontalAlignment="Center"> <Image Height="20" Source="/Client2GWCF;component/Images/commentaire.png" Visibility="{Binding Tube.ComExiste, Converter={StaticResource BoolToReverseVisibility}}"/> <Image Height="20" Source="/Client2GWCF;component/Images/commentaireExiste.png" Visibility="{Binding Tube.ComExiste, Converter={StaticResource BoolToVisibility}}"/> <TextBlock Grid.Row="1" Text="{Binding Tube.NbAxTheo}" TextAlignment="Center" FontSize="15" ToolTip="nombre d'Ax" Margin="2,0,0,0"/> </DockPanel> <!--Indicateur d'avancement--> <Grid Grid.Row="2"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Border BorderThickness="1" BorderBrush="Black" Margin="2" Grid.Column="0" ToolTip="Création de la Worksheet"> <Rectangle Fill="{Binding Tube.WorkWS.Statut, Converter={StaticResource StatutProcessToBrush}}"/> </Border> <Border BorderThickness="1" BorderBrush="Black" Margin="2" Grid.Column="1" ToolTip="Collecte"> <Rectangle Fill="{Binding Tube.WorkCollecte.Statut, Converter={StaticResource StatutProcessToBrush}}"/> </Border> <Border BorderThickness="1" BorderBrush="Black" Margin="2" Grid.Column="2" ToolTip="Création des Runsheet et Summary dans le Temp"> <Rectangle Fill="{Binding Tube.WorkRS.Statut, Converter={StaticResource StatutProcessToBrush}}"/> </Border> <Border BorderThickness="1" BorderBrush="Black" Margin="2" Grid.Column="3" ToolTip="déplacement des output dans le Temp"> <Rectangle Fill="{Binding Tube.WorkOutput.Statut, Converter={StaticResource StatutProcessToBrush}}"/> </Border> </Grid> </Grid> </Button> </UserControl>
Partager