2015-01-15 2 views
0

Есть ли способ предотвратить обновление списка ObservableCollection при наличии ошибки проверки в xaml? Я использую "Связывание" в XAMLПредотвращение обновления ObservableCollection при ошибке

мой 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> 

код за это

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(); 
} 
} 

выше код, чтобы отобразить сообщение об ошибке в подсказке и клетки загорается красным при ошибке проверки. Проблема в том, что коллекция обновляется с недопустимыми значениями. Есть ли способ предотвратить обновление коллекции до тех пор, пока пользователь не разрешит все проверки?

+0

поместить свой код, или объяснить больше. – safi

+0

@safi, пожалуйста, просмотрите обновления – user2837961

ответ

0

вы можете решить вашу проблему clone объект, который войти в режиме editing, когда есть возвращение проверки cloning object и сделать обновление на DataGrid Items

Смежные вопросы