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. デザイン時にコントロールの視覚的な状態を設定する
- 3. React/Redux - 新しい状態に配列の状態を設定します。
- 4. コントロールCSSの状態:ホバー、アクティブ
- 5. 設定両親状態
- 6. CodeIgniterの状態を設定する
- 7. checkListBoxコントロールのチェック状態を辞書から注文/設定する方法
- 8. 以前の値をreactjsの状態に設定します
- 9. コントロールの状態を無効にする
- 10. winformコントロールの状態を理解する
- 11. ReduceはPromiseのデフォルト状態を設定します
- 12. Flex:currentStateChangeハンドラに別の状態を設定しますか?
- 13. React - 子供の状態を設定しますか?
- 14. ロード中のページ状態を設定します(GETリクエスト中)?
- 15. IPv6設定状態を取得する
- 16. SlimDX - 状態ブロックを設定する
- 17. ループスルー反応状態を設定する
- 18. コントロールのキャプションを見つけて状態を変更します。
- 19. コントロールのIsEnabled状態に前景色をバインドします。
- 20. スライダイベント状態の設定状態は関数エラーではありません
- 21. はデフォルトでボタンに状態を設定します
- 22. jSonデータから動的な$ stateProvider状態を設定します
- 23. 初期状態をcomponentwillreceivepropsで設定しますか?
- 24. LWUITのボタン状態の設定
- 25. React他のコンポーネントのネイティブ設定状態
- 26. UIPopoverControllerでのUISwitch状態の設定
- 27. Jmeterの汚れ状態の設定
- 28. 希望の状態の設定 - Azure VM
- 29. React.jsの状態の設定とリセット
- 30. MenuStripのメニュー項目状態の設定
これは、すべてのウィンドウに対してバインディングを作成する必要があることを意味します。私はカスタムコードを実行するためにScreenクラスを拡張するだけの汎用的なアプローチをしたいと思います。これの例は、ユーザーがテキストファイルを持ち、Window.control.property = falseのようなものを書き、アプリケーションがこの情報を使用して値を設定することです。ですから、私はのようなプロパティを作成し、手動でバインドする(または、キャリバーに私のためにバインドするように指示する)ことは望ましくありません。 –
Eggi
申し訳ありませんが、私はそれを5回読みましたが、私はあなたが何を意味するかまだ分かりません。エンドユーザーが設定できる各コントロールの可視性が必要だと言っていますか?それは恐ろしいように聞こえる、これはあなたが望むものだと確信していますか? – devdigital
スーパーユーザー(データベース内)から構成可能である必要があります。したがって、アプリケーションはデータベース内で証券をチェックし、コントロールの可視性/有効化ステータスを設定します。これらのボタン/フィールドの背後にある機能は常にサーバー上にあるので、これは実際のセキュリティチェックではなく、UIに無駄なものをたくさん避けるための手段です。 – Eggi