2016-07-06 1 views
-1

Mon code théorie:Reliure propriété d'un élément dans un ItemsControl d'une collection

ScriptContainerUserControl.xaml

<ItemsControl x:Name="ScriptItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
      <TextBox x:Name="pTB" Text="{Binding PhasePriority}" /> 
      <TextBox x:Name="nTB" Text="{Binding Name}" /> 
      <TextBox x:Name="dTB" Text="{Binding Description}" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

ScriptContainerUserControl.xaml.cs

public ScriptContainerUserControl() : base() 
{ 
    InitializeComponent(); 
    ScriptItemsControl.ItemsSource = PScriptCollection; 
} 

//PScriptCollecion is of type SynchronizedObservableCollection<ProcessScript> 
//ProcessScript has the elements PhasePriority, Name, and Description 

Est-ce que le code ci-dessus travailler pour s'assurer

ScriptItemsControl[i].dTB.Text = PScriptCollection[i].Description? 

Ou n'est-il pas possible de lier comme ça?

+0

Vous ne l'avez même pas essayé? Un conseil: Description doit être une propriété publique dans la classe d'élément de PScriptCollection. – Clemens

+0

J'essaie de résoudre ce problème qui m'empêche de tester ma théorie. Chacun des éléments sont des propriétés publiques. –

+0

Ensuite, cela devrait fonctionner. En plus de cela, vous pouvez toujours écrire un petit programme de test avec exactement ce que vous montrez ici. Vous prend cinq minutes. – Clemens

Répondre

1

Fenster,

Ça doit fonctionner, à condition que vous avez des propriétés setter getter mis en œuvre pour tous les trois propriétés en classe ProcessScript.

Lorsque vous utilisez un datatemplate, cela signifie que vous définissez le datacontext de chaque élément de votre itemscontrol sur un élément de votre collection.

Ainsi, chaque élément ItemControl regarde l'objet ProcessScript et si cet objet a les trois propriétés, vous devriez voir les données.

0

Il n'est pas possible de le faire de cette manière. Vous ne définissez pas la liaison en fait ... Pour prendre en charge l'observation des modifications sur la collection, vous devez lier la collection à la propriété ItemsSource de ItemsControl. au lieu de la ligne:

ScriptItemsControl.ItemsSource = PScriptCollection; 

essayer cette

ScriptItemsControl.ItemsSource = new Binding("PScriptCollection"); 
+0

Pas vrai. Bien qu'il soit courant de lier la propriété ItemsSource, ce n'est pas strictement nécessaire. Vous pouvez aussi bien faire une mission ordinaire. – Clemens

+0

Ensuite, mon idée d'essayer de lier les éléments de la collection aux éléments de ItemsControl devrait fonctionner? –