2010-10-06 12 views

cevap

12

Muhtemelen bir {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}} yoluyla size "üst ızgara/satır" alabilirsiniz bağlayıcı RelativeSource çeşit ayarlamak istiyor ancak soru beni düşündürdü ...

Yapabilirsin:

Kullanım Yansıma:

:

var gridCell = ....; 
var parentRow = gridCell 
     .GetType() 
     .GetProperty("RowOwner", 
       BindingFlags.NonPublic | BindingFlags.Instance) 
     .GetValue(null) as DataGridRow; 

VisualTreeHelper kullanın Her iki gerekiyorsa

<MouseBinding 
    MouseAction="LeftDoubleClick" 
    Command="cmd:CustomCommands.Open" 
    CommandParameter="{Binding ElementName=MyDataGrid}}" /> 

, bir Tuple bunları birleştiren çok değer dönüştürücü ekleyebilirsiniz: Yapabileceğin

0

bir yolu CommandParameter olarak ihtiyaç duyulan elemanların birini veya her ikisini geçerek olduğunu ... senin kod-arkasında erişebildiğinizi e.Parameter İşte

2

ben tam bir cevap olduğunu düşünüyorum budur kullanarak Sonra

(veya bir nesne [] olarak bırakabilirsiniz)

private void Copy(object sender, ExecutedRoutedEventArgs e) 
    { 
     DataGrid grid = GetParent<DataGrid>(e.OriginalSource as DependencyObject); 
     DataGridRow row = GetParent<DataGridRow>(e.OriginalSource as DependencyObject); 
    } 

    private T GetParent<T>(DependencyObject d) where T:class 
    { 
     while (d != null && !(d is T)) 
     { 
      d = VisualTreeHelper.GetParent(d); 
     } 
     return d as T; 
    }