2012-10-28 6 views
0

사용자 정의 확인란 열이 포함 된 Silverlight 프로젝트에서 DataGrid를 사용하고 있습니다. 내 Command 속성을 내 ViewModel 클래스의 속성에 바인딩했습니다.Silverlight에서 바인딩이 올바르게 작동하지 않습니다.

<sdk:DataGrid AutoGenerateColumns="False" Margin="10,0,10,0" Name="dataGridOrders" ItemsSource="{Binding OrderList}" Height="190"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn Header="Select"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox> 
         <is:Interaction.Triggers> 
          <is:EventTrigger EventName="Checked"> 
           <is:InvokeCommandAction Command="{Binding Source={StaticResource ExecutionTraderHomePageVM},Path=OrderSelectedCommand,Mode=TwoWay}" 
                 CommandParameter="{Binding ElementName=dataGridOrders,Path=SelectedItem}" /> 
          </is:EventTrigger> 
          <is:EventTrigger EventName="Unchecked"> 
           <is:InvokeCommandAction Command="{Binding Source={StaticResource ExecutionTraderHomePageVM},Path=OrderSelectedCommand,Mode=TwoWay}" 
                 CommandParameter="{Binding ElementName=dataGridOrders,Path=SelectedItem}" /> 
          </is:EventTrigger> 
         </is:Interaction.Triggers> 
        </CheckBox> 

하지만 난 항상 내 명령의 Execute의 매개 변수에 null 무엇입니까 : 자, 문제는 내가 다음 코드를 작성한있는 명령 매개 변수를 통해 데이터 그리드의 "선택 항목"을 보낼 것입니다 방법. 나는 Width, ActualHeight 등등과 같은 DataGrid의 다른 속성으로 시도했지만 아무 쓸모가 없습니다. 내가 여기서 무엇을 놓치고 있니?

답변

1

여기에서 문제는 이름 범위 지정 중 하나입니다. 간단히 말해서 DataTemplate 내부의 XAML에는 고유 한 '이름 범위'가 있으며 외부의 이름은 볼 수 없습니다. 특히 DataTemplate 외부에있는 부모 DataGrid을 찾을 수 없습니다.

나는 체크하고 체크하지 않은 이벤트를 듣고 왜 그들을 기반으로 명령을 실행하는지 확신 할 수 없다. 당신이 성취하려는 것을 완전히 분명하지는 않습니다. 대신, 양방향 바인딩을 사용하여 CheckBoxIsChecked 속성을 (행 수준)보기 모델 클래스의 bool 속성에 바인딩하고이 bool 속성 설정자의 명령 기능을 호출합니다. 보기 모델 속성을 DataGrid s SelectedItem 속성에 양방향 바인딩으로 바인딩하여 선택한 항목을 유지할 수 있습니다. 내 뷰 모델 클래스의 목록 객체를 가지고있다 :

+0

같은 EventTrigger를 사용한다고 생각합니다. 확인란을 클릭하면 List(DataGrid SelectedItem을 통해)에 해당 행을 추가합니다. 행이 선택 취소 되어도 행이 목록에서 제거됩니다. 제공 한 솔루션이 정상적으로 작동하고 있습니다. 사실 나는 이전에이 접근법을 생각했습니다. 내가 그것을 사용하지 않은 이유는 내가 생각하기에 : 체크 박스가 하나의 속성에 묶여 있기 때문에 그 중 하나를 체크하면 모든 체크 박스가 자동으로 체크된다. 그러나 이것은 일어나지 않습니다. 이유를 설명해 주시겠습니까? –

+0

@HarshMaurya : 확인란이 단일 속성에 바인딩되는 이유는 무엇입니까? 분명히 그들은'Order' 뷰 - 모델 클래스의 다른 인스턴스에서 같은 속성에 바인딩 될 것입니다. –

0

난 당신이 날 내가 무엇을 달성하고자하는 설명하게

<is:EventTrigger EventName="Checked"> 
<is:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CheckBoxUncheckedCommand}" CommandParameter="{Binding}"/> 
           </is:EventTrigger> 
관련 문제