문제

확인란이 포함 된 열이있는 Datagrid가 있습니다. 행을 클릭 할 때 바운드 선택된 속성의 값을 변경하고 싶습니다.

대체 텍스트 http://lh4.ggpht.com/_l9tmtwxftew/sw6ytzrwgei/aaaaaaaglq/pntir2gu6mo/image_thumb%5B3%5D.png

참고 : SelectedItemChanged 이벤트를 사용하고 싶지 않기 때문에 그리드에 행이 하나만있을 때 제대로 작동하지 않기 때문입니다.

도움이 되었습니까?

해결책

종종 내가 이것에 대한 내 자신의 솔루션을 찾은 방식과 마찬가지로 다음과 같습니다.

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

참고 : 이것은 다른 예와 다른 예제는 귀하가 Control Alems inotifyPropertyChanged에 구속력이 있다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top