WPF Veritabanları: “Üst” veri içeriğine nasıl erişirim?


216

Bir pencerede yer alan (aşağıya bakınız) bir liste var. Pencerenin DataContextiki özelliği vardır Itemsve AllowItemCommand.

Pencerenin karşı çözmek için Hyperlink'ın Commandözellik ihtiyaçları için bağlanma nasıl alabilirim DataContext?

<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>

Hata ayıklayıcıya girip kullanıcı arayüzünün oluşturulduğu noktaya geçebilir misiniz? Eğer öyleyse değişkene girip detaylandırmayı deneyebilirsiniz
ist_lion

Yanıtlar:


418

Böyle bir şey deneyebilirsiniz:

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

2
Bunu bir VM içinden bir ListBoxItem üzerinde ayarlanmış bir ContextMenu bir VM içinde bir ICommand bağlamak için kullanılır. Harika çalıştı, teşekkürler !!
Wil P

1
Windows 8 uygulamasında bunu nasıl yaparsınız? Çalışmak için "ElementName = ..." kullandım, ancak DataContext sızdırıyor
Joris Weimar

3
Sızıntı ile ne demek istiyorsun?
flq

Ne yazık ki benim için çalışmadı çünkü ebeveyn farklı bir dosyada.
Thomas

@ Thomas6767, Umarım sorununuzu çözmüşsünüz, lütfen kodunuzu yazabilirsiniz.
Mohammed Abrar Ahmed

38

Bu ayrıca işe yarayacaktır:

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

ListViewit'i devralır DataContextgelen Windowbu noktada mevcut yüzden de,.
Ve ListViewbenzer kontroller (örneğin Gridview, ListBoxvb.) Gibi bir alt sınıf olduğu için ItemsControl, bu Bindingtür kontroller mükemmel şekilde çalışacaktır.


15
(Postere ve editöre bakarak) Bu gönderiyi komik buluyorum ...: D
Jack Frost

@JackFrost, Yoda Kylo'l'un çalışmasına tekrar müdahale ederse. Kylo Yoda'yı öldürecek. : P
Kylo Ren

Hayır, yapamaz. Yoda şimdi güç olan biri. Hehehe
Jack Frost

10

Bu da Silverlight 5'te çalışıyor (belki de daha erken ama test etmedim). Göreli kaynağı böyle kullandım ve işe yaradı.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.