DataGrid Komutu için bir olay işleyicisinde, DataGridCell'i ExecutedRoutedEventArgs uygulamasında alırım. Ancak, onun ilişkili DataGrid ve DataGridRow nasıl elde edeceğini anlayamadım. Yardımınız çok takdir ediliyor.WGF'de DataGridCell'in sahibi DataGrid ve DataGridRow nasıl bulunur?
14
A
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;
}