2010-07-16 2 views
2

Il semble que cela devrait être simple ...
J'ai un contrôle utilisateur que je vais utiliser sur plusieurs onglets d'un onglet de contrôle. Je souhaite que toutes les instances de la commande utilisateur soient synchronisées.simple silverlight databinding listbox to List <>

Dans mon usercontrol j'ai une liste de chaînes:

public static List<string> fonts = new List<string>() { "Arial", "Courier" }; 

Et ListBox:

<ListBox x:Name="fontList" ItemsSource="{Binding Path=fonts}" /> 

Cependant, la zone de liste est jamais peuplée.
Dans la recherche d'un exemple de code, il semble que j'ai vu cette implémentation dans plusieurs exemples, mais je n'arrive pas à le faire fonctionner.
Merci pour tout conseils ...

Mise à jour avec les suggestions de Awj, mais ne fonctionne toujours pas:
MainPage.xaml.cs:

public partial class MainPage : UserControl 
{ 
    public static List<string> _fonts 
     = new List<string>() { "Arial", "Courier" }; 

    public List<string> Fonts { get { return _fonts; } } 
} 

En TestGroup.xaml:

<ListBox x:Name="fontList1" ItemsSource="{Binding Parent.Fonts, ElementName=LayoutRoot}" Margin="3" /> 

Répondre

4
  • Tout d'abord, vous ne pouvez lier que des propriétés et non des champs.
  • Deuxièmement, la propriété doit être une propriété d'instance pour prendre en charge la liaison
  • Troisièmement, à moins que vous ne définissiez l'objet UserControl comme DataContext, vous avez besoin d'une liaison plus sophistiquée.

Dans le code, vous aurez besoin: -

public static List<string> fonts = new List<string>() { "Arial", "Courier" }; 
public List<string> Fonts {get { return fonts; } } 

et XAML: -

<ListBox x:Name="fontlist" ItemsSource="{Binding Parent.Fonts, ElementName=LayoutRoot}" />