Quelqu'un s'il vous plaît me aider à comprendre pourquoi cette liaison ne fonctionne pas ...silverlight 3 collection liant
J'ai une classe appelée SelectionManager avec une propriété appelée « date » qui est peuplé par un service WCF. La propriété est un tableau de structures qui regroupe un horodatage et un nombre entier d'objets métier.
public class SelectionManager : INotifyPropertyChanged {
... other properties ...
public DQMServiceDateCountPair[] dates { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName) {
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }
}
J'ai une autre classe appelée dateSelector qui a un DependencyProperty appelé « paires » installation pour être la cible juridiquement contraignante des dates ».
public partial class DateSelector : UserControl {
... other stuff ...
public static readonly DependencyProperty pairsProperty = DependencyProperty.Register(
"pairs",
typeof(DQMServiceDateCountPair[]),
typeof(DateSelector),
new PropertyMetadata(new DQMServiceDateCountPair[0])
);
public DQMServiceDateCountPair[] pairs {
get { return (DQMServiceDateCountPair[])GetValue(pairsProperty); }
set {
Debug.WriteLine("adding dates");
SetValue(pairsProperty, value);
dateMode = DateMode.Years;
}
}
}
Dans mon MainPage.xaml, j'ai une ligne comme ceci:
<date:DateSelector x:Name="dateSelector" pairs="{Binding dates}" />
Il est bizarre, parce que tous mes autres liaisons dans la mise à jour MainPage.xaml correctement, y compris un ComboBox lié aux « dates » . Mon UserControl cependant, ne mettra pas à jour. La ligne Debug.Writeline n'est pas appelée dans l'instruction set de la propriété 'paires'. En jouant avec cela, j'ai essayé de transformer la propriété DQMServiceDateCountPair [] en ObservableCollection et en implémentant INotifyCollectionChanged, mais cela n'aide pas. Si je laisse la propriété source ou la propriété target sous forme de tableau et que l'autre est ObservableCollection, j'obtiens une erreur de liaison qui indique qu'elle ne peut pas convertir automatiquement l'un à l'autre. Silverlight semble donc connaître la liaison, il ne suffit pas de le mettre à jour.
Quelqu'un peut-il aider?
P.S. J'utilise Silverlight 3.
Je pense que vous pourriez mal comprendre le problème. La classe SelectionManager est mise à jour correctement à partir du service WCF. Le problème est que la classe DateSelector, dont la propriété 'paires' est liée à 'dates', n'est pas mise à jour. À moins que je ne sois mal compris, les données DataContract/DataMember sont utilisées dans le WebService pour faciliter la sérialisation. Il n'y a pas de sérialisation entre les UserControls dans mon application. – Klay
Le problème est-il que l'événement NotifyPropertyChanged n'est pas lancé? Si oui, la réponse d'Anthony ci-dessous résout ce problème. –