2つの列を持つ単純な標準WPF 4 DataGridがあります。WPF:すべてのDataGridTemplateColumnsで検証エラーが表示されるDataGrid
<DataGrid ItemsSource="{Binding Source={StaticResource ItemDataView}}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Alpha">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Alpha}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Beta">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Beta}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
表示されたデータオブジェクトはように定義される:
public class MyObject : INotifyDataErrorInfo
{
[Required]
public string Alpha { get; set; }
public string Beta { get; set; }
public bool HasErrors
{
get { return string.IsNullOrEmpty(Alpha); }
}
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public IEnumerable GetErrors(string propertyName)
{
yield return propertyName;
}
}
すなわちアルファ空でない値を有していなければならないが、ベータはnullにすることができます。
アルファ値が空の場合はとなります。アルファとベータのセルには、検証エラーを示す赤い枠が付けられています。これはDataGridTemplateColumnsでのみ発生します。 DataGridTextColumnを追加しようとしましたが、赤い枠線が得られません。ベータ列は、何かに束縛されていない場合、またはコントロールが接続されていない場合でも(たとえば、DataTemplateが空の場合)、赤い枠線を取得します。
a)これはなぜ発生しますか?
b)どうやって止めることができますか?私はエラーのセル上に赤いバリデーションの境界線が必要です。
あなたのHasErrors関数は、アルファの評価のみを返します。だから、ベータ細胞はアルファ細胞の状態が何であれミラーリングするだけです。 –