2010-12-09 7 views
1

MVVM 패턴을 사용하여 객체에 DataGrid를 바인딩했습니다. 여기데이터 바인딩 된 데이터 격자의 행 속성 설정

<DataGrid ItemsSource="{Binding Path=RecordSet}" 
      AutoGenerateColumns="False" 
      IsReadOnly="True" 
      Name="ResultGrid"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/> 
     <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/> 
    </DataGrid.Columns> 
</DataGrid> 

는 :

RecordSet is a List<Record>. 

이 잘 작동합니다. 데이터가 정상적으로로드됩니다. 개별 행에 몇 가지 속성을 설정해야하는지, 즉 행 속성을 내 ViewModel의 값에 바인딩 할 수 있는지 알고 싶습니다 (Record.Enable을 기반으로 각 행의 Row.IsEnable을 설정). 저는 WPF에서 초보자입니다.

감사합니다.

답변

3

이렇게하면됩니다. 이 스타일을 DataGrid 내부에 배치하십시오.

<DataGrid.RowStyle>     
      <Style TargetType="DataGridRow">  
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Enabled}" Value="false"> 
         <Setter Property="Visibility" Value="Hidden"/> 
         <Setter Property="Height" Value="0"/> 
        </DataTrigger>       
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 

이렇게하면이 행에 바인딩 된 레코드가 활성화되어 있지 않으면 행이 보이지 않게되고 높이가 계산되지 않습니다. "{Binding Path = Enabled}"의 Enabled 속성은 레코드에 속합니다. 네가 이미 그걸 가지고 있다면 나는 모르지만 그와 비슷한 것이 필요할 것이다.

+0

이것은 나에게 조금 위험한 것처럼 보입니다. 어쩌면 그것은 작동하지 않습니다 (나는 그것을하지 않을거야),하지만 난 행 필터 예상보다 커서 키와 같은 어떤 이상한 가장자리의 경우를 피하기 위해 행을 숨기려면 더 나은 것 같아요 –

3

wangburger의 답변을 확인하십시오. 커서 키를 사용하면 다음 IsEnabled=false에 행 스타일을 설정하면 해당 행이 실제로 전혀 선택할 수 없습니다, 둘 것 : 기록에 사용에 각 DataGridRow의의 IsEnabled 속성을 결합하려면
당신이

<DataGrid ItemsSource="{Binding Path=RecordSet}" 
      AutoGenerateColumns="False" 
      IsReadOnly="True" 
      Name="ResultGrid"> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="IsEnabled" Value="{Binding Enabled}"/> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding Path=Id}" Width="Auto"/> 
     <DataGridTextColumn Header="Foo" Binding="{Binding Path=Foo}" Width="*"/> 
    </DataGrid.Columns> 
</DataGrid> 
0

참고를 할 수 없다 그걸 건너 뜁니다. 이것은 당신이 원하는 것일 수도 아닐 수도 있습니다.

당신은 특별히 IsEnabled=false을 설정하려면 (그리고 난 당신이 단지 예를 들어 있음을 준 실현),하지만 여전히 다음 각 열 템플릿 IsEnabled=false을 설정합니다 (AFAIK)가 필요합니다 행이 선택 될 수 있습니다.

관련 문제