Silverlight Datagrid行クリック
-
05-07-2019 - |
質問
チェックボックスを含む列を持つデータグリッドがあります。行がクリックされたときにバインドされたSelectedプロパティの値を変更したい:
alt text http://lh4.ggpht.com/_L9TmtwXFYwS/WYWYWS /AAAAAAAAGlQ/pntIr2GU6Mo/image_thumb%5B3%5D.png
注:SelectedItemChangedイベントを使用したくないのは、グリッドに行が1行しかない場合に適切に機能しないためです。
解決
これに対する私自身の解決策を見つける方法はよくある:
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プロパティを切り替える簡単な方法です:-)
これが他の誰かに役立つことを願っています。
他のヒント
これはさらに簡単なソリューションです
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を実装することを前提としています
所属していません StackOverflow