2010-06-14 3 views
2

J'essaye de placer la propriété ItemsSource d'un DataGrid nommé dgIssueSummary à ObservableCollection nommé IssueSummaryList. À l'heure actuelle, tout fonctionne quand je mets la propriété ItemsSource dans mon code-behind:Comment puis-je définir l'ItemsSource d'un DataGrid en XAML?

public partial class MainPage : UserControl 
{ 
    private ObservableCollection<IssueSummary> IssueSummaryList = new ObservableCollection<IssueSummary> 

    public MainPage() 
    { 
     InitializeComponent(); 
     dgIssueSummary.ItemsSource = IssueSummaryList 
    } 
} 

Cependant, je préfère défini la propriété ItemsSource en XAML, mais je ne peux pas le faire fonctionner. Voici le code XAML je:

<sdk:DataGrid x:Name="dgIssueSummary" AutoGenerateColumns="False" 
       ItemsSource="{Binding IssueSummaryList}" > 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn Binding="{Binding ProblemType}" Header="Problem Type"/> 
     <sdk:DataGridTextColumn Binding="{Binding Count}" Header="Count"/> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 

Que dois-je faire pour définir la propriété ItemsSource être le IssueSummaryList en XAML plutôt que C#?

Répondre

2

Vous devez attribuer à "IssueSummaryList" une propriété. Si vous faites cela, vous pouvez lier directement. Vous ne pouvez pas lier via Xaml à un champ privé. Vous devrez également définir DataContext sur "this" (ou utiliser une autre méthode pour trouver l'instance appropriée).

+0

est-ce pas la chose DataContext nécessaire que si vous utilisez le M-V-VM modèle pour la liaison? Il semble n'utiliser que du code derrière les fichiers – KroaX

+0

@KroaX: Non. La liaison fonctionne via un DataContext. Le modèle MVVM en tire parti, mais la liaison de données dans WPF (et Silverlight) lie toujours une propriété sur le DataContext utilisé par UIElement. –

1

Votre IssueSummaryList est privé. Vous devez en faire une propriété avec get et set

public ObservableCollection<IssueSummary> IssueSummaryList 
{ 
    get 
    { 
     // ... 
    } 
} 
1

Le XAML est correct, donc le problème doit être dans la liaison.

  • La collection ObservableCollection est-elle exposée en tant que propriété?
  • Comment avez-vous défini la liaison? Dans le cas le plus simple, vous utilisez un code comme:

    this.DataContext = this;

dans le eventhandler Window_Load

Questions connexes