0

ViewModel にあるプロパティにラップされた linq エンティティがあります。

public NA_Header Na_Header
{
    get
    {
        _na_header=Job.NA_Headers.FirstOrDefault();
        return _na_header;
    }
    set { _na_header = value; }
}

ビューでこの Na_Header プロパティを使用して、GUI (xaml) のフィールドを更新します。

<Toolkit:DateTimePicker BorderBrush="Gray"  Grid.Column="1" Grid.Row="1"  Margin="5" VerticalAlignment="Top" Value="{Binding Path=Na_Header.JobStart, Mode=TwoWay, Converter={StaticResource thisNullDateConverter}, ValidatesOnDataErrors=True}"  Format="Custom" FormatString="MMM dd yyyy"/>
<Toolkit:DateTimePicker BorderBrush="Gray"  Grid.Column="1" Grid.Row="2"  Margin="5" VerticalAlignment="Top" Value="{Binding Path=Na_Header.JobEnd, Mode=TwoWay, Converter={StaticResource thisNullDateConverter},ValidatesOnDataErrors=True}" Format="Custom" FormatString="MMM dd yyyy"/>

このオブジェクトには、Na_Header.JobStart と Na_Header.JobEnd に対して検証する 2 つのプロパティがあることに注意してください (これらは日付です)。各プロパティで ValidatesOnDataErrors を true に設定しています。

また、ViewModel には IDataError が実装されています。

public string this[string columnName]
{
    get
    {
        if (columnName == "Na_Header")
        {
            if (Na_Header.JobStart > Na_Header.JobEnd)
                return "Job Stat Date must be an earlier date than Job End Date";
        }
        return "";
    }
}

public string Error
{
    get { throw new NotImplementedException(); }
}

残念ながら、JobStart または JobEnd プロパティが変更された場合、DataError は発生しません。NotifyPropertyChanged は linq エンティティであるため、必要ないと思います (PropertyChanged は自動的に行われます)。

手がかりはありますか?

4

1 に答える 1

0

しかし、あなたが言うように、Linq エンティティはありません。

IEnumerable First() は実際には T 型のオブジェクトを返していますが、フィールド _na_header の定義は示していません。Job/Na_Job だと思います。

いくつかの選択肢があることをお勧めします。

  1. Job クラスが ViewModel 名前空間の一部である場合 (または、Model レイヤーでも変更されたときに更新を取得したい場合)、INotifyPropertyChanged を実装します。このようにして、JobStart と JobEnd が Binding を更新します。

  2. NA_Header プロパティを公開する代わりに、代わりに JobStart と JobEnd を公開してみませんか (そして、ViewModel に INotifyPropertyChanged を実装しますが、既に実装していると思います)。これにより、モデル層の一部のクラスを非表示にすることで ViewModel が簡素化されるか、より複雑になる可能性がありますが、簡素化された XAML の利点があります。

于 2012-12-10T19:02:23.300 に答える