2012-08-31 1 views
0

ria 및 MVVM을 사용하여 Silverlight 앱을 만들었습니다. 나는 DataGrid를 호스팅하는 ChildWindow를 만들었습니다. 이 데이터 격자는 현재 내 <Book> 테이블을로드합니다. 데이터 표를 사용자 정의하여 책 이름 만 다시 가져오고 특정 책을 선택하는 확인란 열을 추가했습니다. 사용자가 책을 여러 개 선택하려고 할 때만 나타납니다.체크 박스 열을 사용하여 테이블에 입력 할 행을 선택하는

목표는 사용자가 원하는 모든 책을 선택한 다음 저장 버튼을 누르고 책 이름과 ID를 내 책 테이블과 관계가있는 다른 테이블에 추가하는 것입니다. 책 테이블에는 책과 책 ID 목록이 들어 있으며 두 번째 표 <JM>은 사용자가 선택한 ID와 모든 책을 보유하기로되어 있습니다. 따라서 나중에 사용자가 책을 검색하려고 할 때 책이나 여러 책 선택을 요청하면 선택한 모든 책이 반환됩니다. 쉬운 물건.

그러나 현재 여러 책을 테이블에 추가 할 수 없습니다. 선택한 항목 코드로 인해 한 권의 책만 입력됩니다. 내가 selectedItems를 모든 selectedItems를을 반환 생각했기 때문에

JobMarket jm = new JobMarket(); 
foreach (Book b in dataGrid1.SelectedItems) 
{ 
    dataGrid1.SelectedItems.Add(b); 
    jm.BookID = b.BookID; 
    jm.Book = b.Book1; 
} 
_context.JobMarkets.Add(jm); 
SubmitOperation s = _context.SubmitChanges(); 

this.DialogResult = true; 

는 나는이 방법을 시도하지만, 현재 단지 마지막으로 선택한 항목입니다. 내 체크 박스 컨트롤은 DataGrid에 중첩되어 있으므로 코드 숨김을 통해 액세스 할 수 없습니다. 나는 방법이 있다는 것을 알고 있습니다, 나는 단지 그것을하는 방법을 모른다. 나는 foreach가 반복되어 체크 박스를 찾을 것이라고 생각했지만 그렇지 않았다.

그래서이 문제를 해결하고이 클릭 이벤트에서 모든 작업을 수행 할 수있는 방법을 찾고 있습니다. 내 자신의 코드와 비슷한 코드를 사용하여 코드에서이 작업을 수행하는 쉬운 방법이 있습니까 (내 이해 수준) 여기에는 xaml 데이터 격자도 있습니다.

<sdk:DataGrid AutoGenerateColumns="False" Height="532" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" > 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn Header="Add Book"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="chkAddBook" IsChecked="{Binding Book1, Mode=TwoWay}" /> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn> 
     <sdk:DataGridTemplateColumn Header="Book"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Book1}" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="12,3" /> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 
+0

"선택"이란 무엇을 의미합니까? 상자 또는 행 선택 만 선택하면됩니까? –

+0

예. 죄송합니다. 동일한 행에있는 책에 해당하는 상자를 선택하십시오. – jcc

답변

0

정확하게 이해하면 사용자가 검사 한 모든 책을 가져오고 싶습니다.

bool 속성 IsChecked를 Book 클래스에 추가하고 Datagridcheckboxcolumn에서 양방향 바인딩을 만들 수 있습니다. 나중에 나중에 선택한 책을 선택할 수 있습니다.

이 속성으로 책 클래스를 확장하지 않으려면 필요한 속성으로 책의 래퍼를 만들고 이러한 래퍼 컬렉션을 만들어 DataGrid에 바인딩 할 수 있습니다.

<DataGrid ItemsSource="{Binding MyBooksCollection}"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding Path=IsChecked, Mode=TwoWay}" /> 
    </DataGrid.Columns> 
</DataGrid> 

MyBooks 컬렉션에는 IsChecked 속성이있는 개체가 포함되어야합니다.

+0

bool 속성을 테이블을 호출하는 ria 서비스에 추가 하시겠습니까? 첫 번째 옵션이 더 좋게 들리 겠지만 래퍼/콜렉션을 익히는 데 익숙하지 않다. – jcc

+0

나는 bool 속성을 DataGrid에 바인딩 된 컬렉션에 저장된 객체에 추가하는 것을 의미한다. –

+0

이미 확인란이 자체 테이블 테이블에 바인딩되어있어 내 SelectedItems 속성에 표시됩니다. 그러나 객체와 일치 시키려고하면 속성이 적합하지 않습니다. 모든 코드 예제가 있습니까? – jcc

관련 문제