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:

alt text http://lh4.ggpht.com/_L9TmtwXFtew/Sw6YtzRWGEI /AAAAAAAAGlQ/pntIr2GU6Mo/image_thumb%5B3%5D.png

. HINWEIS: Ich mag nicht das SelectedItemChanged Ereignis verwenden, da diese nicht richtig funktionieren, wenn es nur eine Zeile im Raster ist

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top