2011-07-26 3 views
0

사용자가 여러 행을 선택하여 나중에 수행 할 수 있도록 DataGrid에 확인란이있는 열이 있어야합니다. 그리드 ItemsSource는 ObservableCollection에 바인딩됩니다. 내 가장 빠른 솔루션 (최고는 아니지만 그냥 작동 시키려면) 나는 바인딩 할 수있는 IsSelected 속성을 추가하고 거기에서 일하는 컬렉션의 클래스에서 상속하는 것이 될 것이라고 생각. 그러나, 내가 시작하는 콜렉션은 이미 인스턴스화되어 있으며, 다운 캐스팅/반항은 나를 위해 작동하지 않습니다. 그리고 파생 된 클래스의 컬렉션을 다시 만들 수는 없습니다.MVVM에 Silverlight DataGrid에 "select"열을 추가하는 방법

그래서 지금은 확인란 열에 첨부 된 동작이있는 간단한 해결책을 찾고 있습니다. 나는 이것에 너무 많은 시간을 소비하지 않으려 고 노력하고 있으므로 몇 가지 아이디어가 필요하다.

답변

0

나는 결국 이런 식으로해야 할 일을했을 :

1) 대신 DataGridCheckBoxColumn의에 TemplateColumn 내부의 체크 박스를 사용을 DataGridCheckBoxColumn이 & Unchechecked 이벤트를 검사하지 않기 때문에 에 후크.

2) 체크 박스에 체크 된 이벤트와 체크되지 않은 이벤트에 대한 비헤이비어 클래스를 만들고 각각에 대해 별도의 명령을 사용하십시오. CheckBox에는 Command 속성이 이미 있지만 CommandParameter로 사용되지 않는 한 컨트롤의 체크/체크되지 않은 상태를 확인하는 방법이없는 것 같아서, 정보를 전달해야했기 때문에 비헤이비어 클래스를 만들어야했습니다. DataGrid에서 항목을 바운드

3)보기에서 VM에 대한 참조를 전달하고 코드 숨김으로 정적 리소스로 VM을 선언하십시오. 같은 Observab에 액세스하는 동안 확인란을 사용하여 VM의 명령에 바인딩하려면이 방법을 수행해야했습니다

0

당신이하고있는 일은 좋은 방법이라고 생각합니다. 사용중인 하위 클래스는 원래 클래스의 "ViewModel"과 비슷합니다.

그러나, 거기가 아닌 DependencyProperty 때문에 당신이 불행하게도, 직접 바인딩 할 수 없습니다 DataGrid 제어의 SelectedItems 모음을 사용하여 내가 this post by Laurent Bugnion에있는 또 다른 방법은, 그러나 그는에서 EventToCommand 동작을 사용하여 자신의 MVVMLight Toolkit이고 SelectedItems 컬렉션은 CommandParameter으로 전달됩니다.

난이 도움이 되었으면 좋겠)

+0

이 방법의 문제점은 SelectedItems가 확인란과 같은 열 "선택기"와 독립적으로 작동한다는 것입니다. . 그리드에서 무엇을 선택했는지에 상관없이 내 "SelectedItems"컬렉션을 유지하는 것과 같습니다. 행을 선택할 수는 있지만 선택란은 선택 취소됩니다. – Random

+0

이것 역시 Behaviors와 같은 것으로도 달성 할 수 있다고 생각합니다. 그러나 나는 그들에게 익숙하지 않습니다. – AbdouMoumen

+0

확장 된 DataGrid를 사용하는 좀 더 일반화 된 접근 방법은 절대적으로 도움이 될 것입니다. 그러나 지금 당장이 인스턴스에 대해 걱정할 필요는 없습니다. – Random

관련 문제