代码之家  ›  专栏  ›  技术社区  ›  Mark Cooper

Silverlight DataGrid行单击

  •  7
  • Mark Cooper  · 技术社区  · 15 年前

    我有一个包含复选框的列的数据报。我想在单击行时更改绑定选定属性的值:

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

    注意:我不想使用SelectedItemChanged事件,因为当网格中只有一行时,它不能正常工作。

    2 回复  |  直到 12 年前
        1
  •  7
  •   Mark Cooper    13 年前

    正如我找到自己解决方案的方式一样:

    将MouseLeftButtonUp事件添加到DataGrid:

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

    walk the visual tree 要获取数据网格行:

    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属性是一种简单的方法:-)

    希望这能帮助别人。

        2
  •  0
  •   Ben Anderson    12 年前

    这里有一个更简单的解决方案

    XAML标准

    <data:DataGrid 
    x:Name="dgMyDataGrid" 
    ItemsSource="{Binding MyList}"
    SelectedItem="{Binding MyList, Mode=TwoWay}"
     MouseLeftButtonUp="dgMyDataGrid_MouseLeftButtonUp">...
    

    反恐精英

    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。