OnActivateメソッド内のビューモデルに属するすべてのコントロールの有効/無効の状態を設定しようとしています。これまでのところ問題ありませんが、ビューモデルからビューにアクセスすることなくこれを行うより良いアプローチがあるかどうかはわかりません。Caliburn.Microコントロールの状態を設定します。
1
A
答えて
3
はい、バインディングを使用します。 XAMLでは、Visibility
プロパティをビューモデルのパブリックプロパティにバインドするように設定し、標準BooleanToVisibilityConverter
を使用して、ブールビューモデルのパブリックプロパティを有効なVisibility
値に変換します。
ビュー要素の可視性を構成可能にするための一般的なソリューションを作成する場合は、Caliburn.Microバインディングプロセスにプラグインする方法もあります。たとえば、ViewModelBinder.BindProperties
呼び出しリストに別の要素を追加できます。
私はこれをテストしていませんが、ここでこれはあなたのブートストラップのConfigure
方法で行われます。同様
protected override void Configure()
{
ViewModelBinder.BindProperties += (namedElements, viewModelType) =>
{
foreach (var element in namedElements)
{
// Generate a unique identifier for an element on a particular view
string uniqueElementId = string.Format("{0}.{1}", viewModelType.FullName, element.Name);
// Calculate the visibility of the element based on unique element id
bool elementVisible = ...
// Set the element's visibility
element.Visibility = elementVisible ? Visibility.Visible : Visibility.Collapsed;
}
};
... other configuration code
}
BindProperties
公共Func
は、あなたのビューに名前のすべての要素のコレクションを取得しますバインドされているビューモデルのタイプとして指定します。この情報を使用して、各ビューコントロールを一意に識別し、その一意の識別子に基づいてデータから可視性を計算することができます。
各要素のVisibility
をこのようなコードに設定すると、XAMLのVisibility
プロパティに存在するすべてのバインディングが優先されます。
0
これで何を達成したいのか正確にはわかりません。それにもかかわらず、ビューまたはC.MのVisualStateを使用(および変更)します。ガード方法は仕事をするかもしれません。
関連する問題
- 1. デザイン時にコントロールの視覚的な状態を設定する
- 2. コントロールCSSの状態:ホバー、アクティブ
- 3. Flex:currentStateChangeハンドラに別の状態を設定しますか?
- 4. IPv6設定状態を取得する
- 5. SlimDX - 状態ブロックを設定する
- 6. コントロールの状態を無効にする
- 7. winformコントロールの状態を理解する
- 8. UIPopoverControllerでのUISwitch状態の設定
- 9. LWUITのボタン状態の設定
- 10. QDockWidgets、UIDesignerから入れ子状態を設定しました
- 11. 休止状態でカスタムマップを設定
- 12. 状態IDの設定ExtJSで選択
- 13. コントロールのIsEnabled状態に前景色をバインドします。
- 14. Androidの設定/非表示の状態での設定のアクティビティ
- 15. JavaFX並行タスク設定状態
- 16. ボタンの状態を設定し、それをonClickの後に保持します。
- 17. pluginweek/state_machineを使用してcollection_selectで自分の状態を設定します
- 18. Qtコントロールの無効状態の色をプログラムで設定する方法はありますか?
- 19. ポップアップを作成して表示状態を表示する前にその表示状態を設定する
- 20. 指定したCOMアパートメントの状態を設定できません
- 21. SSRSがプログラムでパラメータを設定してValidValueMissing状態にする
- 22. テストを実行する前に設定の状態を設定する
- 23. ASP.net FileUploadコントロールはマルチビューパネルで状態を維持しません
- 24. 設定方法:inIDOMUtils :: setContentStateを使用してDOM要素のホバー状態を設定しますか?
- 25. WPF:トリガーを使用してコントロールの状態を変更する
- 26. すべてのXcode設定を元の状態に戻す
- 27. 背景イメージをどのように選択状態に設定しますか?
- 28. HSQLDBデータ型を休止状態の構成ファイルに設定しますか?
- 29. ListView [Android]のチェックボックスのデフォルト状態を設定するには
- 30. React?の状態を設定するonChangeイベントの処理方法
これは、すべてのウィンドウに対してバインディングを作成する必要があることを意味します。私はカスタムコードを実行するためにScreenクラスを拡張するだけの汎用的なアプローチをしたいと思います。これの例は、ユーザーがテキストファイルを持ち、Window.control.property = falseのようなものを書き、アプリケーションがこの情報を使用して値を設定することです。ですから、私はのようなプロパティを作成し、手動でバインドする(または、キャリバーに私のためにバインドするように指示する)ことは望ましくありません。 –
Eggi
申し訳ありませんが、私はそれを5回読みましたが、私はあなたが何を意味するかまだ分かりません。エンドユーザーが設定できる各コントロールの可視性が必要だと言っていますか?それは恐ろしいように聞こえる、これはあなたが望むものだと確信していますか? – devdigital
スーパーユーザー(データベース内)から構成可能である必要があります。したがって、アプリケーションはデータベース内で証券をチェックし、コントロールの可視性/有効化ステータスを設定します。これらのボタン/フィールドの背後にある機能は常にサーバー上にあるので、これは実際のセキュリティチェックではなく、UIに無駄なものをたくさん避けるための手段です。 – Eggi