我有一个包含复选框的列的数据网格。我想改变装订选属性的值被点击行时:Silverlight Datagrid行点击
注意:我不想用SelectedItemChanged事件,因为这并不能正常工作,只有一个时在网格中排。
我有一个包含复选框的列的数据网格。我想改变装订选属性的值被点击行时:Silverlight Datagrid行点击
注意:我不想用SelectedItemChanged事件,因为这并不能正常工作,只有一个时在网格中排。
由于经常是我发现我自己的解决方案,这种方式:
添加的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属性:-)
希望这可以帮助别人。
我喜欢你的解决方案。它比我的更有意义。虽然,我想知道你从哪里得到这个'MyDependencyObjectHelper'类。我假设你的自定义代码。小心分享它? – 2010-02-25 06:36:09
它在“漫游视觉树”下的答案中链接。 GLad帮助,Mark – 2010-02-26 07:32:38
+1伟大的解决方案!我花了3个小时试图破解一个网格来“自动选择”一个复选框,并没有提出任何接近优雅的东西。 – 2010-04-01 20:38:07
这里有一个更简单的解决方案
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
您想要再次点击该行时切换吗?点击行中是否有任何地方不应该有这种效果? – AnthonyWJones 2009-11-26 16:28:15