Je tente de créer un contrôle personnalisé dans Silverlight 3 et j'éprouve des problèmes étranges avec celui-ci.Problème lors de la connexion de données à un contrôle personnalisé dans Silverlight
Mon XAML pour le contrôle utilisateur est ceci:
<UserControl x:Class="StronicoMain.GenericSmallIcon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300" >
<Canvas x:Name="canGSI">
</Canvas>
</UserControl>
Le behind pour le contrôle utilisateur est ce
private string _EntityTypeID;
public string EntityTypeID
{
get
{
return _EntityTypeID;
}
set
{
_EntityTypeID = value;
}
}
public GenericSmallIcon()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Page_Loaded);
}
public void Page_Loaded(object sender, RoutedEventArgs e)
{
icoMale icoMale = new icoMale();
icoFemale icoFem = new icoFemale();
if (EntityTypeID == null)
{
canGSI.Children.Add(icoMale);
}
else if (EntityTypeID == "1")
{
canGSI.Children.Add(icoMale);
}
else if (EntityTypeID == "2")
{
canGSI.Children.Add(icoFem);
}
else
{
canGSI.Children.Add(icoMale);
}
}
Je vous appelle de l'adaptateur DataGridSelection (extrait de la page d'exemple Microsoft Toolkit pour la version AutoCompleteBox-Datagrid) - la partie pertinente se présente comme suit:
<Stron:DataGridSelectionAdapter x:Name="SelectionAdapter" AutoGenerateColumns="False" IsReadOnly="False">
<Stron:DataGridSelectionAdapter.Columns>
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate><Stron:GenericSmallIcon EntityTypeID="{Binding EntityTypeID}"></Stron:GenericSmallIcon></DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTextColumn Header="Contact Name" FontWeight="Bold" Foreground="#CC000000" Binding="{Binding EntityName}" />
<data:DataGridTextColumn Header="Tags" Binding="{Binding EntityTags}" />
</Stron:DataGridSelectionAdapter.Columns>
</Stron:DataGridSelectionAdapter>
je lance le code, et j'obtiens l'erreur "ManagedRuntimeError # 4004" - si j'essaie d'utiliser le contrôle personnalisé lors de la définition manuelle de la liaison de données, cela fonctionne très bien, si j'essaie de me fier aux valeurs qui sont databound, j'obtiens l'erreur. Comment puis-je créer un événement de databound personnalisé sur un contrôle personnalisé? Je pense que c'est le problème, que la page se charge avant que les valeurs lui soient passées.
Merci à tous.
~ Steve
mise à jour, voici le travail, changé le code selon la réponse acceptée
public static readonly DependencyProperty EntityTypeIDProperty = DependencyProperty.Register("EntityTypeID", typeof(string), typeof(GenericSmallIcon), new PropertyMetadata(new PropertyChangedCallback(GenericSmallIcon.OnEntityTypeIDPropertyChanged)));
public string EntityTypeID
{
get { return (string)GetValue(EntityTypeIDProperty); }
set { SetValue(EntityTypeIDProperty, value); }
}
private static void OnEntityTypeIDPropertyChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
GenericSmallIcon control = d as GenericSmallIcon;
string b = (string)e.NewValue;
}
pouvez-vous poster le message d'erreur innerexception pour votre erreur? –