2015-01-15 4 views
0

xaml에 유효성 검사 오류가있을 때 ObservableCollection 목록으로의 업데이트를 방지하는 방법이 있습니까? 위의 코드는 툴팁 및 셀에 오류를 표시 할오류시 ObservableCollection으로의 업데이트 금지

public string this[string columnName] 
{ 
get 
{ 
    var result = string.Empty; 
    switch (columnName) 
    { 
     case "RangeLeft": 
      if (RangeLeft == 0) 
      { 
       result = "RangeLeft should be greater than zero"; 
      } 
      break; 
    } 

    return result; 

} 
} 

public string Error 
{ 
get 
{ 
    StringBuilder error = new StringBuilder(); 

// iterate over all of the properties 
// of this object - aggregating any validation errors 
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(this); 
foreach (PropertyDescriptor prop in props) 
{ 
    String propertyError = this[prop.Name]; 
    if (propertyError != string.Empty) 
    { 
     error.Append((error.Length != 0 ? ", " : "") + propertyError); 
    } 
} 

return error.Length == 0 ? null : error.ToString(); 
} 
} 

입니다 내가 사용하고

내 XAML

<ControlTemplate x:Key="ErrorTemplate"> 
    <DockPanel LastChildFill="True"> 
     <Border BorderBrush="Red" BorderThickness="1"> 
      <AdornedElementPlaceholder /> 
     </Border> 
    </DockPanel> 
</ControlTemplate> 

<Style TargetType="TextBlock"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
    Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

</Window.Resources> 
<DataGrid Name="grid" HorizontalAlignment="Stretch" ItemsSource="{Binding mMngModelList}" Margin="0,0,0,50" VerticalAlignment="Stretch" AutoGenerateColumns="False" CanUserAddRows="False"> 

    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Name"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding Name}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn>     
     <DataGridTemplateColumn Header="Type"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Type}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding Type}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Range Left"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding RangeLeft,ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True}" Validation.ErrorTemplate="{StaticResource ErrorTemplate}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding RangeLeft, ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True}" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

코드 뒤에 XAML에서 "바인딩"입니다 유효성 검사 오류가 있으면 빨간색으로 바뀝니다. 문제는 컬렉션이 잘못된 값으로 업데이트된다는 것입니다. 모든 유효성 검사가 사용자에 의해 해결 될 때까지 컬렉션에 대한 업데이트를 방지하는 방법이 있습니까?

+0

에 새로 고침을 코드를 넣어 이상을 설명 할 수있다. – safi

+0

@safi 업데이트를 참조하십시오. – user2837961

답변

0

당신은 clone에 의해 검증 반환 cloning object이 때 editing 모드에서 입력되는 객체를 문제를 해결하고 DataGrid Items