Silverlight Datagrid Row Klicken Sie
-
05-07-2019 - |
Frage
Ich habe einen Datagrid mit einer Spalte eine Checkbox enthält. Ich möchte den Wert der gebundenen Ausgewählte Eigenschaft ändern, wenn die Zeile geklickt wird:
. HINWEIS: Ich mag nicht das SelectedItemChanged Ereignis verwenden, da diese nicht richtig funktionieren, wenn es nur eine Zeile im Raster ist
Lösung
Wie oft die Art, wie ich meine eigene Lösung dafür gefunden zu haben:
Fügen Sie ein MouseLeftButtonUp Ereignis an das Datagrid:
<data:DataGrid x:Name="dgTaskLinks"
ItemsSource="{Binding TaskLinks}"
SelectedItem="{Binding SelectedTaskLink, Mode=TwoWay}"
MouseLeftButtonUp="dgTaskLinks_MouseLeftButtonUp"
>...
und gehen die visuelle Struktur die Datenstartreihe zu erhalten:
private void dgTaskLinks_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
///get the clicked row
DataGridRow row = MyDependencyObjectHelper.FindParentOfType<DataGridRow>(e.OriginalSource as DependencyObject);
///get the data object of the row
if (row != null && row.DataContext is TaskLink)
{
///toggle the IsSelected value
(row.DataContext as TaskLink).IsSelected = !(row.DataContext as TaskLink).IsSelected;
}
}
Einmal gefunden, ist es ein einfacher Ansatz die gebundene IsSelected Eigenschaft wechseln: -)
Hope, das hilft jemand anderes.
Andere Tipps
Hier ist eine noch einfachere Lösung
XAML
<data:DataGrid
x:Name="dgMyDataGrid"
ItemsSource="{Binding MyList}"
SelectedItem="{Binding MyList, Mode=TwoWay}"
MouseLeftButtonUp="dgMyDataGrid_MouseLeftButtonUp">...
CS
private void dgMyDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
DataGrid dg = (sender as DataGrid);
var allObjects = dg.DataContext as List<MyCustomObject>;
foreach(var o in allObjects)
{
o.Selected = false;
}
MyCustomObject SelectedObject = (MyCustomObject)dg.SelectedItem;
SelectedObject.Selected = true;
}
Hinweis: Dies sowie das andere Beispiel nimmt an Ihre Klasse, die Sie an die Steuerung sind verbindlich implementiert INotifyPropertyChanged