2011-05-31 6 views
2

私はコレクションにバインドされているのItemsControlを持って、私は時間のカップルのために、この問題にグーグルでてきたと私は出会った最高のものは、私は私のメインビューでItemsControlのItemのコードの背後にあるItemsControlのItemsSource要素にアクセスするにはどうすればいいですか?

を必要とする正確に何でないいるItemContainerGenerator、でしたオブジェクトの:このビューで

<DataTemplate x:Key="ActivationLevelTemplate"> 
    <view:ConceptActivationView Height="50"/> 
</DataTemplate> 

上記のコレクションからオブジェクトのプロパティにバインドされたテキストブロックがある:ActivationLevelTemplateはちょうど別の図である

<ItemsControl ItemsSource="{Binding Path=Concepts}" 
       ItemTemplate="{StaticResource ActivationLevelTemplate}" 
       /> 

。プロパティが正しく表示され、後ろのビューのコードから同じオブジェクトの他のプロパティにアクセスする必要があります。それは些細なようですが、私はそれを働かせることができませんでした。

<TextBlock Text="{Binding Path=Name}" 
      HorizontalAlignment="Center" 
      /> 
<d3:Plotter2D Name="Plotter"/>  
+0

コードの中で何をしようとしていますか? – tofutim

+0

いくつかの線をプロットするためにオブジェクトからグラフデータを取得する必要があります。 – catcall

答えて

5

重要なことは、そのオブジェクトにアクセスしようとするコンテキストです。たとえば、DataTemplate内のイベントを処理する場合、送信側のDataContextからオブジェクトを簡単に取得できます(FrameworkElementでなければなりません)。私は、ボタンのクリックに処理した場合:あなたの全体のビューがDataTemplateの内部にある場合は実際には

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var button = (FrameworkElement)sender; 
    var employee = (Employee)button.DataContext; 
    //... 
} 

をあなたにも直接閲覧者のDataContextからオブジェクトを取得することができます。

+0

ああ、DataContext as Employee!それはとても簡単でした!どうもありがとうございます!それは今働く。 – catcall

+0

助けてくれてありがとう:)(回答の左側にあるチェックマークのアウトラインをクリックしてこの回答を受け入れることができます) –

+0

兄弟ボタンにアクセスする方法、たとえば、現在のボタンをクリックすると前のボタンスタイルをクリアする必要がありますか? – Batur

0

ItemsControl内のアイテムを繰り返し処理し、必要なすべてのプロパティを取得することができます。あなたはのCurrentItemかにgetItemAtを(試みることができる特定のアイテムが必要な場合は代わりに)

foreach (YourItem item in itemsControl.Items) 
{ 
    // your logic... 
} 

の後ろにコードで次に

<ItemsControl Name="itemsControl" ... /> 

を:あなたが背後にあるコードでそれに対処できるようItemsControlに名前を付け
itemsControl.Items.CurrentItem 
// or 
itemsControl.Items.GetItemAt()