【问题标题】:Silverlight Datagrid Row ClickSilverlight Datagrid 行单击
【发布时间】:2010-12-20 17:24:08
【问题描述】:

我有一个数据网格,其中有一列包含一个复选框。单击该行时,我想更改绑定的 Selected 属性的值:

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

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

【问题讨论】:

  • 是否要在再次单击该行时进行切换?行中是否有任何点击不应该产生这种效果的地方?

标签: silverlight datagrid


【解决方案1】:

我通常是这样找到自己的解决方案的:

向数据网格添加 MouseLeftButtonUp 事件:

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

希望这对其他人有所帮助。

【讨论】:

  • 我喜欢你的解决方案。它比我的更有意义。虽然,我想知道你从哪里得到这个“MyDependencyObjectHelper”类。我假设它是您的自定义代码。愿意分享吗?
  • 它链接在“Walk the visual tree”下的答案中。很高兴这有帮助,马克
  • +1 很棒的解决方案!我花了 3 个小时试图破解一个网格来“自动选择”一个复选框,但没有想出任何优雅的东西。
  • @MarkCooper 当我尝试访问“遍历可视化树”链接时,我收到了来自 Blogger 的权限被拒绝消息。您能否将其更改为开放访问,或者将代码放在您的答案中?
  • @flipchart 博客已移至 wordpress。链接已更新。
【解决方案2】:

这是一个更简单的解决方案

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

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 2012-01-02
    • 2011-08-03
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多