2017-03-02 5 views
1

내 DataGrid xaml 마크 업이 현재와 같이 보이며 유효성 검사 오류가 발생해도 이미지가 전혀 표시되지 않습니다. 내가 가지고있는 유일한 유효성 검사 오류는 필드에 입력 된 데이터가있는 경우입니다 (필드가 필요합니다).유효성 검사 오류가 발생하면 DataGridCell에 이미지를 배치하려면 어떻게합니까?

<DataGrid RowValidationErrorTemplate="{x:Null}" Name="dataGridInstitution" ItemsSource="{Binding Path=OrgIDs, Mode=TwoWay}" CanUserDeleteRows="True" CanUserAddRows="True" AddingNewItem="DataGrid_AddingNewInstitution" AutoGenerateColumns="False" Height="300" Width="1170" CanUserResizeColumns="False" > 
    <DataGrid.Resources> 
     <Style x:Key="CellErrorStyle" TargetType="{x:Type DataGridCell}"> 
      <Setter Property="Validation.ErrorTemplate" > 
       <Setter.Value> 
        <ControlTemplate> 
         <DataGridCell> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Path=(Validation.Errors)[0].ErrorContent}" /> 
           <Image Source="icons/status_error.png" Height="16" HorizontalAlignment="Right" /> 
          </StackPanel> 
         </DataGridCell> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn  Header="Institution ID" Binding="{Binding Institution, Mode=TwoWay, ValidatesOnDataErrors=True }"  Width="80" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Org ID"   Binding="{Binding value, Mode=TwoWay, ValidatesOnDataErrors=True }"    Width="50" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Data Source" Binding="{Binding Datasource, Mode=TwoWay }"         Width="150" /> 
     <DataGridTextColumn  Header="User Code"  Binding="{Binding Security.UserCode, Mode=TwoWay, ValidatesOnDataErrors=True }" Width="70" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Password"  Binding="{Binding Security.Password, Mode=TwoWay, ValidatesOnDataErrors=True }" Width="75" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridComboBoxColumn Header="Image Web Service Location"   ItemsSource="{Binding Source={StaticResource Specifications}, Path=ImageWebServices, Mode=TwoWay}"   SelectedItemBinding="{Binding ServerLocation, ValidatesOnDataErrors=True}" Width="325" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridComboBoxColumn Header="Image Streaming Web Service Location" ItemsSource="{Binding Source={StaticResource Specifications}, Path=ImageStreamingWebServices, Mode=TwoWay }" SelectedItemBinding="{Binding StreamingServerLocation}"     Width="325" /> 
     <DataGridComboBoxColumn Header="Trace Level"       ItemsSource="{Binding Source={StaticResource tracingEnum}}"             SelectedItemBinding="{Binding Tracing.Level, Mode=TwoWay}"     Width="*" /> 
    </DataGrid.Columns> 
</DataGrid> 

답변

0

당신은이 작업을 수행해서는 안 : RowValidationErrorTemplate="{x:Null}"

가 대신 그것이 욕망에 값의 설정해야하는 것은 당신이 유효성 검사 오류가있을 때 컨트롤이 갖고 싶어 보인다. 이처럼 :

<DataGrid Name="dataGridInstitution" ItemsSource="{Binding Path=OrgIDs, Mode=TwoWay}" CanUserDeleteRows="True" CanUserAddRows="True" AddingNewItem="DataGrid_AddingNewInstitution" AutoGenerateColumns="False" Height="300" Width="1170" CanUserResizeColumns="False" > 
    <DataGrid.RowValidationErrorTemplate> 
     <ControlTemplate> 
     <Grid Margin="0,-2,0,-2" 
      <Image Source="myImage.jpg" /> 
     </Grid> 
     </ControlTemplate> 
    </DataGrid.RowValidationErrorTemplate> 
    <DataGrid.Resources> 
     <Style x:Key="CellErrorStyle" TargetType="{x:Type DataGridCell}"> 
      <Setter Property="Validation.ErrorTemplate" > 
       <Setter.Value> 
        <ControlTemplate> 
         <DataGridCell> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Path=(Validation.Errors)[0].ErrorContent}" /> 
           <Image Source="icons/status_error.png" Height="16" HorizontalAlignment="Right" /> 
          </StackPanel> 
         </DataGridCell> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn  Header="Institution ID" Binding="{Binding Institution, Mode=TwoWay, ValidatesOnDataErrors=True }"  Width="80" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Org ID"   Binding="{Binding value, Mode=TwoWay, ValidatesOnDataErrors=True }"    Width="50" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Data Source" Binding="{Binding Datasource, Mode=TwoWay }"         Width="150" /> 
     <DataGridTextColumn  Header="User Code"  Binding="{Binding Security.UserCode, Mode=TwoWay, ValidatesOnDataErrors=True }" Width="70" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridTextColumn  Header="Password"  Binding="{Binding Security.Password, Mode=TwoWay, ValidatesOnDataErrors=True }" Width="75" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridComboBoxColumn Header="Image Web Service Location"   ItemsSource="{Binding Source={StaticResource Specifications}, Path=ImageWebServices, Mode=TwoWay}"   SelectedItemBinding="{Binding ServerLocation, ValidatesOnDataErrors=True}" Width="325" CellStyle="{StaticResource CellErrorStyle}" /> 
     <DataGridComboBoxColumn Header="Image Streaming Web Service Location" ItemsSource="{Binding Source={StaticResource Specifications}, Path=ImageStreamingWebServices, Mode=TwoWay }" SelectedItemBinding="{Binding StreamingServerLocation}"     Width="325" /> 
     <DataGridComboBoxColumn Header="Trace Level"       ItemsSource="{Binding Source={StaticResource tracingEnum}}"             SelectedItemBinding="{Binding Tracing.Level, Mode=TwoWay}"     Width="*" /> 
    </DataGrid.Columns> 

- 편집 -

이전 방법은 다소 표준 및 더 효율적입니다 각 행에 대해 유효성 검사 오류를 가지고있다.

<Style TargetType="ContentPresenter"> 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
</Style> 
<Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 
     <ControlTemplate > 
      <!--You do your styling here--> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

자세한 내용은이 행하지만 2의 시작에 아이콘을 추가 수행이 위대한 기사 here

+0

있다 : 당신이 세포에 의해 검증 셀을 원한다면, 당신은 다음과 같은 스타일을 사용할 필요가 우려. 1. 오류가 발생한 DataGridCell에 아이콘이 나타나기를 원합니다. (현재 셀에 빨간색 테두리 만 표시 중입니다.) 2. 행의 오류를 수정하면 행 시작 부분의 오류 아이콘이 지워지지 않습니다. –

+0

정말 그렇지 않으면 그 길을 지키지 않는 것이 좋습니다. 하지만 어쨌든 대답을 편집하여 도움이되기를 바랍니다. – Emad

+0

오류가 해결 된 후 아이콘을 지울 수있는 방법을 찾지 못했지만 아이콘이 셀이 아니라 행에 있어야합니다. –