Silverlight Datagrid Row Click - PullRequest
       9

Silverlight Datagrid Row Click

7 голосов
/ 26 ноября 2009

У меня есть таблица данных со столбцом, содержащим флажок. Я хочу изменить значение привязанного свойства Selected при щелчке строки:

альтернативный текст http://lh4.ggpht.com/_L9TmtwXFtew/Sw6YtzRWGEI/AAAAAAAAGlQ/pntIr2GU6Mo/image_thumb%5B3%5D.png

ПРИМЕЧАНИЕ: я не хочу использовать событие SelectedItemChanged, потому что это не работает должным образом, когда в сетке есть только одна строка.

Ответы [ 2 ]

7 голосов
/ 26 ноября 2009

Как часто я нашел свое собственное решение для этого:

Добавить событие MouseLeftButtonUp в сетку данных:

<data:DataGrid x:Name="dgTaskLinks"
ItemsSource="{Binding TaskLinks}"
SelectedItem="{Binding SelectedTaskLink, Mode=TwoWay}"
MouseLeftButtonUp="dgTaskLinks_MouseLeftButtonUp"
>...

И пройдитесь по визуальному дереву , чтобы получить строку сетки данных:

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

            }

Найдя, вы просто переключаете привязанное свойство IsSelected: -)

Надеюсь, это поможет кому-то еще.

0 голосов
/ 18 июля 2012

Вот еще более простое решение

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

Примечание: в этом, как и в другом примере, предполагается, что ваш класс привязан к элементу управления INotifyPropertyChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...