2016-07-06 5 views
-1

私の理論コード:コレクションからのItemsControlのアイテムのプロパティをバインド

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 

う上記のコードを確認するための作業

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

このようにバインドできませんか?

+0

あなたはそれを試したこともありませんでしたか?ヒント:説明は、PScriptCollectionの要素クラスのパブリックプロパティでなければなりません。 – Clemens

+0

私は私の理論をテストするのを妨げている問題を修正して問題を解決しようとしています。各要素はパブリックプロパティです。 –

+0

それは動作するはずです。それに加えて、あなたはここに示しているものとまったく同じ小さなテストプログラムを書くことができます。 5分かかります。 – Clemens

答えて

1

フェンスター、

を試してみてください。

datatemplateを使用すると、itemscontrolの各要素のdatacontextをコレクションの要素に設定していることを意味します。

ここで、各Itemcontrol要素はProcessScriptオブジェクトを参照し、そのオブジェクトに3つのプロパティがすべてある場合は、そのデータが表示されます。

0

このようにすることはできません。あなたは実際にBindingを設定しません...コレクションの変更を監視するためには、ItemsControlのItemsSourceプロパティにコレクションをバインドする必要があります。代わりに、行の :

ScriptItemsControl.ItemsSource = PScriptCollection; 

は、それは間違いなくあなたがProcessScriptクラス内のすべての3つのプロパティのために実装ゲッターセッター性質を持って提供し、動作するはずです。この

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

ItemsSourceプロパティをバインドするのは一般的ですが、厳密には必要ではありません。あなたは普通の割り当てをすることもできます。 – Clemens

+0

次に、ItemsControlの項目にCollectionの項目をバインドしようとする私の考えはうまくいくはずですか? –

関連する問題