2015-01-15 108 views
0

當xaml中存在驗證錯誤時,有沒有辦法阻止更新到ObservableCollection列表?在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

相關問題