Je rencontre un problème majeur dans la liaison de données.DataBinding dans ItemsControl à une propriété UserControl personnalisée
J'ai un StackPanel avec un ItemControl dans mon MainPage.xml:
<StackPanel>
<ItemsControl x:Name="TopicList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:TopicListItem Title="{Binding Title}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
Puis-je brancher un objet IEnumerable
à ce qui contient un objet avec la propriété Title
sur elle. Il se fait dans les MainPage.xaml.cs (et je sais que la partie LINQ travaille):
var resultStories = from story in resultXML.Descendants("story")
select new NewsStory {...};
Dispatcher.BeginInvoke(() => TopicList.ItemsSource = resultStories);
Et dans mon TopicListItem de contrôle personnalisé J'ai créé un DepenencyProperty
et correspondant biens publics:
#region Title (DependencyProperty)
/// <summary>
/// Title
/// </summary>
public String Title
{
get { return (String)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));
private static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((TopicListItem)d).OnTitleChanged(e);
}
private void OnTitleChanged(DependencyPropertyChangedEventArgs e)
{
throw new NotImplementedException();
}
#endregion Title (DependencyProperty)
Quand je lance cela et il essaie de régler la ItemSource
une erreur se produit dans la propriété Titre:
System.TypeInitializationException: le type initialiseur pour « NewsSync.Topic ListItem a jeté une exception. ---> System.ArgumentException: Le type de valeur par défaut ne correspond pas au type de la propriété.
- Comme une note de côté
: J'ai essayé de ne pas déclarer un DepenencyProperty pour la propriété Titre et avoir juste comme une chaîne publique. Mais alors je reçois des problèmes de conversion où il est dit que je ne peux pas convertir de System.[...].Binding
à System.String
Donc j'ai vraiment essayé beaucoup de choses.
Cela a été difficile à cracker et je l'ai fait par accident en utilisant un changement similaire: public static readonly DependencyProperty TitleProperty = DependencyProperty.Register ("Titre", typeof (String), typeof (TopicListItem), new PropertyMetadata (null)); ' – JeroenEijkhof
Merci pour la clarté que je n'avais pas réalisé cette partie sur la valeur par défaut de la propriété de dépendance. Quel chemin que je cherchais aussi: – JeroenEijkhof