2009-07-14 18 views
165

Bir pencerede bulunan bir listem var (aşağıya bakın). Pencerenin DataContext iki özelliğine sahiptir, Items ve AllowItemCommand.WPF Veri bağlama: "Ebeveyn" veri içeriğine nasıl erişirim?

Hyperlink 's Command özelliğinin penceresinin DataContext karşı düzelmesi için bağlanma gereksinimini nasıl alabilirim?

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ... 
+0

Hata ayıklayıcısına girebilir ve UI'nin oluşturulduğu noktaya gidebilir misiniz? Eğer öyleyse bu değişkene girebilir ve –

+0

detaylandırmayı deneyebilirsiniz Basit çözüm (Windows 8 Mağazası/Metro uygulamasında da çalışır) burada: [http://stackoverflow.com/questions/15366609/how-to-access- anne-datacontext-in-penceresinden-8-mağaza-apps/15419382 # 15419382] (http://stackoverflow.com/questions/15366609/how-to-access-parents-datacontext-in-window-8-store-apps/15419382 # 15419382) – LMK

cevap

331

Böyle bir şey deneyebilirsiniz. Göreceli kaynağı böyle kullandım ve iyi çalıştı.

Bu aynı zamanda olacak

RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"

+2

Bunu, bir MyBoxItem üzerinde bir Style içinden ayarlanan ContextMenu'dan VM'mdeki bir ICommand'a bağlamak için kullandım. Büyük çalıştı, teşekkürler! –

+1

Bunu bir Windows 8 uygulamasında nasıl yaparsınız? Çalışmak için "ElementName = ..." kullandım, ancak DataContext –

+3

sızıntısı sızıntı ile ne demek istiyorsun? – flq

6

Bu aynı zamanda Silverlight 5 (belki daha önce de ama bunu test etmedim) çalışır:

<ListView ItemsSource="{Binding Items}"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="Action"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
      <StackPanel> 
       <TextBlock> 

       <!-- this binding is not working --> 
       <Hyperlink Command="{Binding AllowItemCommand}" 
          CommandParameter="{Binding .}"> 
        <TextBlock Text="Allow" /> 
       </Hyperlink> 

       </TextBlock> 
      </StackPanel> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 
+0

Neden bu iyi bir fikir değil? – rolls

17

çalışır: bu noktada kullanılabilir onun DataContextWindow gelen, bu yüzden

<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, 
          Path=DataContext.AllowItemCommand}" /> 

ListView de devralır. Ve benzer denetimler gibi (örneğin Gridview, ListBox, vb.) ListView'dan beri, ItemsControl alt sınıfıdır, bu denetimler için Binding mükemmel çalışır.

İlgili konular