2011-02-22 20 views
2

XAMLのデータグリッドに検証を追加しようとしています。XAML Datagridを1行に設定する

現在、3つのテキストボックスに有効な入力があるかどうかをチェックするメソッドを作成し、falseの場合は、データグリッドがバインドされているコレクションの値をtrueまたはfalseに設定します。この部分はうまく動作します。

私が今問題になっているのは、実際にこれを動作させることです。

私は、コンバータを作成しました:

public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    bool isRowValid = ((bool)value); 

    ConsoleColor validColour = ConsoleColor.Green; 
    ConsoleColor invalidColour = ConsoleColor.Red; 

    if (isRowValid) 
    { 
     return validColour; 
    } 
    else 
    { 
     return invalidColour; 
    } 
    } 

行が無効である場合、それは緑色に表示されますときに有効なので、それは、赤く表示されます。

行がフォーカスを失うと、各行を検証するメソッドが呼び出されます。デフォルトでは、各行は無効に設定されています。

私は

<DataGrid.RowBackground> 
    <SolidColorBrush Color="{Binding Path=IsRowValid, Converter={StaticResource RowValidConverter}}" /> 
</DataGrid.RowBackground> 

を行うことにより、各行の背景を設定しようとしてきたが、理想的には、私はこれが唯一のテキストの色ではなく、背景を調整したいと思います。これを実装する方法について

任意の提案を大幅に、

おかげでいただければ幸いです。私は正しく、あなたの問題を理解していれば

答えて

2

私はより簡単なアプローチは、またはあなたがプロパティで、この他の方法をcontrolingしている場合にIsRowValidと呼ば

<DataGrid ...> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="TextElement.Foreground" Value="Green"/> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="True"> 
        <Setter Property="TextElement.Foreground" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <!--...--> 
</DataGrid> 

RowStyleにValidation.HasErrorのためのトリガーを追加することだと思うあなたViewModelには、あなただけのユーザーとして実行時に、このアップデートは、データを編集し、迅速な応答をDataTriggerに

<DataTrigger Binding="{Binding IsRowValid}" Value="True"> 
    <Setter Property="TextElement.Foreground" Value="Red"/> 
</DataTrigger> 
+0

感謝をトリガーを変更できますか? – Purplegoldfish

+0

@Purplegoldfish:はい、Validation.HasErrorはAttachedプロパティなので、値が変更されるたびに常に通知を受けます。あなたのプロパティ 'IsRowValid'にバインドしたい場合は、依存プロパティでなければならないか、INotifyPropertyChangedを実装する必要があります –

+0

ありがとう、私はなぜそれがアップデートされていないのだろうかと疑問に思っていました。今すぐ素晴らしい作品です。 – Purplegoldfish

関連する問題