Name、SensorWidth、SensorHeightなどのプロパティを持つCameraオブジェクトがあります。これらのプロパティをUIにバインドしたいのですが、アプリケーションの起動時にCameraがnullになっています(ユーザーは任意のカメラを選択できます)。カメラが開かれている場合にのみ、Cameraオブジェクトが初期化されます(そしてそのすべてのプロパティがロードされます)。
オブジェクトが初期化されたときに機能し始めるようにXAMLでデータバインディングを設定する方法はありますか?
これはC#で簡単に行うことができます-カメラを開いた後にデータバインディングを設定しますが、これはビューコードビハインドで行う必要があります。これは、カメラを開くためのボタンがコマンドインターフェイスを使用して通信しているため、使用しているMVVMパターンにはおそらく悪いですViewModelを使用します。
これに正しくアプローチする方法は何ですか?
オブジェクトが初期化されたときに機能し始めるようにXAMLでデータバインディングを設定する方法はありますか?
バインディングは、null値を適切に処理するように設計されています。Camera
起動時にオブジェクトがnullの場合は、問題はありません。WPFは、バインディングソースがnullである可能性があり、プロパティパスに沿ったすべての値がnullである可能性があることを想定しています。
とはいえBinding
、が値を正常に生成するタイミングを理解することは有用です。
(1)と(2)が有効な値を生成できない場合、バインディングはターゲットプロパティのデフォルト値を生成します。この状況で使用する代替値を指定する場合はFallbackValue
、バインディングにを指定できます。
あなたの場合、があり{Binding Camera.Name}
、Camera
がnullの場合、バインディングは値を生成できません。バインディングを{Binding Camera.Name, FallbackValue='n/a'}
に変更した場合n/a
、Camera
がnullの場合に文字列が生成されます。
TargetNullValue
バインディングが有効な値を生成するが、その値がnullである場合に、代替値を指定できます。たとえば、それCamera
自体がnull以外であるが、Name
nullである場合{Binding Camera.Name, TargetNullValue='(no name)'}
、文字列を生成します(no name)
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加