2016-07-06 10 views
-1

Meine Theorie Code:Bindung Eigenschaft eines Elements in einem Items aus einer Sammlung

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 

Würde der Code oben arbeiten für das Sicherstellen

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

Oder ist es nicht möglich, so zu binden?

+0

Sie haben es nicht einmal versucht? Ein Hinweis: Beschreibung muss eine öffentliche Eigenschaft in der Elementklasse von PScriptCollection sein. – Clemens

+0

Ich versuche zu reparieren und zu veröffentlichen, was mich davon abhält, meine Theorie zu testen. Jedes der Elemente ist öffentliche Eigenschaften. –

+0

Dann sollte es funktionieren. Außerdem können Sie immer ein kleines Testprogramm mit genau dem, was Sie hier zeigen, schreiben. Nimmt dich fünf Minuten. – Clemens

Antwort

1

Fenster,

Es sollte auf jeden Fall funktionieren, vorausgesetzt, Sie Getter Setter Eigenschaften haben für alle drei Eigenschaften in ProcessScript Klasse implementiert.

Wenn Sie ein Datatemplate verwenden, bedeutet dies, dass Sie den Datenkontext jedes Elements Ihres itemscontrol auf ein Element Ihrer Sammlung setzen.

so wird hier jedes Itemcontrol-Element das ProcessScript-Objekt betrachten und wenn dieses Objekt alle drei Eigenschaften hat, sollten Sie die Daten sehen.

0

Dies ist auf diese Weise nicht möglich. Sie legen Binding nicht wirklich fest ... Um Unterstützung für das Beobachten von Änderungen in der Auflistung zu erhalten, sollten Sie die Auflistung an die ItemsSource-Eigenschaft von ItemsControl binden. Statt Linie:

ScriptItemsControl.ItemsSource = PScriptCollection; 

versuchen, diese

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

Nicht wahr. Obwohl es üblich ist, die ItemsSource-Eigenschaft zu binden, ist dies nicht unbedingt erforderlich. Sie können auch eine gewöhnliche Aufgabe machen. – Clemens

+0

Dann sollte meine Idee zu versuchen, die Elemente der Sammlung an die Elemente des ItemsControl zu binden, funktionieren? –