私の MVVM アプリには、「ID」プロパティを公開する基本ユーザー コントロールから継承するビューが多数あります。XAML では、これはビューの基になるビュー モデルの ID プロパティにバインドされます。
Id="{Binding Path=Id}"
ビュー モデルは INotifyPropertyChanged を実装し、その ID はコンストラクターで設定されます。ID は、各ビュー/ビュー モデルを一意に識別するために使用され、主に、MDI アプリのように、メイン ウィンドウ内のユーザー コントロールを管理するために「デスクトップ マネージャー」によって使用されます。アプリが起動したら、さまざまなビュー モデルとそのビューをインスタンス化し、ビュー モデルをビューに割り当てますDataContext
。次に、ビューをデスクトップ マネージャーに渡します。デスクトップ マネージャーは、ビューをキャンバスに配置したり、配置したりします。
私が抱えている問題は、ビューの ID がこの時点ではまだ null であり、しばらくしてからデータ コンテキストにバインドされているように見えることです (おそらく UI がレンダリングされたときですか?)。このようにバインディングを強制しようとしましたが、役に立ちません:-
var bindingExpression = widget.GetBindingExpression(DesktopElement.IdProperty);
bindingExpression.UpdateTarget();
ビュー モデルからビューとID をデスクトップ マネージャーに渡すことができるので、これで終わりというわけではありませんが、少しハッキーな感じがします。コントロール/ウィンドウのライフサイクルのどの時点でバインディングが発生するのか、バインディングを強制的に発生させる他の方法があるかどうかを知りたいと思っていましたか?
前もってありがとうアンディ