3

私はこのWPF検証、IDataErrorInfo、INotifyPropertyChangeなどでそこに到達していますが、更新時の新しい問題です。たくさんのコントロールがあるウィンドウがあります。タブ付きのページ インターフェイスがあり、簡単にするために 2 つのページがあります...それぞれに 5 つのコントロールがあります。

レコードの「追加」を開始すると、すべてのフィールドが空白になります。例: 検証が必要な最初のページの 3 つのフィールドは、それらが必須であることを示すために赤い境界線として適切にフラグ付けされています... 問題ありません。

ここで、ページ 2 をクリックし、すぐにページ 1 に戻ります。赤い境界線がすべて消えています。それらを明示的にタブで移動して再度フォーカスし、フォーカスを失い、失われたフォーカス/プロパティが IDataErrorInfo を介して検証を変更するように強制しない限り、それらは赤く再表示されません。

まず、ページ 1 の可視性をページ 2 を表示するように変更してからページ 1 に戻す必要があるという理由だけで、WPF が最初のページの外観を失っている理由について説明します。

2 つ目は、コントロールが必要であることを示す赤い境界線で適切に更新されるようにコントロールを強制する方法に関する提案です。

ありがとう

4

2 に答える 2

6

検証するコントロールを AdornerDecorator 内に配置するだけで、正常に動作します;)

 <TabItem>
  <AdornerDecorator>
    <Grid>
      <TextBox>
      </TextBox>
      ...
   </Grid>
  </AdornerDecorator>
</TabItem>
于 2013-05-04T20:15:50.940 に答える
1

正しく思い出せば、コントロールのデフォルトのエラー検証マーカーは、コントロール自体の一部ではなく、コントロールの上部にオーバーレイされた赤いボックスであるため、コントロールが非表示になっている場合、そのオーバーレイの可視性は維持されません。コントロールテンプレートを変更して、コントロールの一部として赤い境界線/ラベルを直接組み込むことを試みると、その問題が解決される可能性があります。

すべてのバインディングを強制的に更新(したがって検証)するには、再検証するプロパティに対してRaisePropertyChangedを再度呼び出すだけです。少し無駄ですが、パラメータとして空の文字列を指定してRaisePropertyChangedを呼び出すだけで、ビューモデルのすべてのプロパティに対して発生します。

于 2012-05-04T19:11:43.843 に答える