問題タブ [multibinding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - MultiBinding を使用して複数の CommandParameters をバインドする際に追加のヘルプが必要
複数のパラメーター、つまり、前述のトグルボタンの IsChecked プロパティと、文字列、バイト、整数などの定数値を取ることができるトグルボタンのコマンドハンドラーが必要です...問題ありません。
SOでこの素晴らしい質問を見つけ、回答のリンクをたどって、MultiBindingとIMultiValueConverterを読みました。MultiBinding を書かなければならないまではとてもスムーズに進みました。
その後、Kent Boogaart が回答した別の同様の質問に出くわし、これを回避する方法を考え始めました。
考えられる方法の 1 つは、MVVM を使用せず、単に Tag プロパティを ToggleButton に追加することです。この場合、MultiBinding は次のようになります。
Kent は、「MVVM を使用している場合は、この問題を回避できるはずです」というコメントを出しています。ただし、必要な選択の WPF パターンとして MVVM を採用したにもかかわらず、それが私にとっての選択肢であるかどうかはわかりません。
私がこれを言う理由は、UserControl に複数の ToggleButton があり、各 ToggleButton のコマンドが同じ関数を呼び出す必要があるためです。しかし、それらはトグル ボタンであるため、ViewModel で IsChecked にバインドされたプロパティを使用することはできません。これを追跡するために別のプライベート プロパティを追加できると思いますが、少しばかげているようです。定数に関する限り、追跡のアイデアを実行すればおそらくこれを取り除くことができますが、それを回避する他の方法はわかりません.
ここで私に良い提案はありますか?:)
編集- わかりましたので、バインディングを更新する必要がありますが、まだ正しく動作しません:
IsChecked は機能していましたが、Tag は機能していませんでした。Tag が文字列であることに気付きました...当たり前です。それは今働いています!重要なのは、 Selfの RelativeSource を使用することでした。
wpf - WPF:MultiValueConverterのConvertBackメソッドで元の値を取得する方法はありますか?
指定されたリストに指定された値が含まれているかどうかをチェックし、含まれている場合は true を返す MultiValueConverter を作成しました。カスタムチェックボックスリストへのバインドに使用します。ここで、ConvertBack メソッドを記述して、チェックボックスがオンになっている場合に元の値がモデルに送信されるようにします。ConvertBack メソッドで値にアクセスする方法はありますか?
XAML:
バインドすると正しい結果が得られますが、元に戻すときにバインドされた ID を取得する方法はありますか? 私が達成したいのは、チェックボックスがチェックされていない場合、値がリストから削除され、チェックされている場合、値がリストに追加されることです。
validation - 双方向マルチバインディング検証
ex、textbox1 のマルチバインディングがあり、その値は textbox2 と textbox3 に依存し、バインディングは双方向であり、マイナスの場合、ex エラーに対してすべてのテキストボックスが同じ検証ルールを適用する場合があります。
どういうわけか、textbox1 が更新された場合、textbox2 と textbox3 の検証が開始されます。ただし、textbox2 または textbox3 のいずれかが更新されると、textbox1 の検証は実行されません。
- ValidatesOnTargetUpdated="True" を設定しようとしましたが、何も起こりませんでした。
何かアドバイス?
c# - TranslateTransform.X の MultiBinding が WPF で機能しないように見えるのはなぜですか?
私はこれをばかげているのではないことを願っていますが、フレームワークのまったく新しいものである WPF でグラフ ビューアーを設計しようとしています。私は自分の問題に対するいくつかの解決策を思いつきましたが、私が最も誇りに思っている解決策は...本来あるべき場所で機能しません。私がやろうとしているのは、ダイクストラの alg + いくつかの数学で計算した位置に ItemsControl にノードを配置することです。問題は、通常の X および Y Binding を使用するときに移動するのは、Border を持つ TextBlock の左上隅ですが、代わりに操作したいのはその中心です。したがって、私のノードは、指定したポイントの中心ではなく、そのポイントから右に突き出てしまいます。
最終的に、NodeViewModel の X/Y プロパティとグリッドの ActualWidth/Height を使用してマルチバインディングに落ち着きました。何が起こるかというと、すべてのノードが (0,0) に配置されます! 私もコードをデバッグしてコンバーターを見ましたが、戻り値は問題ないようです。他のプロパティへのバインドなど、いくつかのランダムなことも試しました。
私は完全に困惑しています。
1 つの質問は、MultiBinding がそのように機能するかどうかです。それとも私は愚かな間違いを犯していますか?Converter を XAML コードの下に投稿します。XAML で切り取られた部分は、ツールヒントと埋め込まれた ItemsControl ですが、これらを切り取っても何も変わりません (コードがわかりやすくなる以外は)。コンバーターでのキャストは、フロートへの直接キャストが機能しないためです (ただし、それは無関係です。あまり美しくなくても、そのまま機能します)。
そして別の質問は、もっと簡単な方法でそれを行うことができますか? TextBlock の中心を直接操作するようなものですか?
XAML:
C#:
乾杯、マイケル
c# - WPF マルチバインディング
XAML を使用せずに C# で MultiBindings を直接実装する必要があります。C# で IMultiValueConverter を使用する方法は知っていますが、その方法は次のとおりです。
C#で?
wpf - オブジェクト内の新しいプロパティ値を他の2つのオブジェクトの同じプロパティにディスパッチする方法
WPFでは、同じものを公開する3つのオブジェクトがありますDependencyProperty
(整数だとしましょう)。3つのプロパティ値すべての同期を維持する必要があります。つまり、オブジェクト内でint値が変更されるたびに、この値が他の2つのオブジェクトに伝播されます。私multibinding
はその仕事をしようと思っていますが、どのオブジェクトが変更されたかを検出する方法がわかりません。したがって、どの値を使用して他のオブジェクトに伝播する必要があります。
編集済み:これがマルチバインディングの暫定コードですが、追加のコードがなくても機能するという誤った希望があります:
しかし実際には、最後の命令によって設定されたバインディングにコンバーターがないというランタイムエラーがあります。しかし、このコンバーターの書き方がわかりません(3つのrgbプロパティをcolorプロパティにリンクするコードの関連MSサンプルの場合のように、変換するものはありません)、変更されたプロパティの値を転送するだけです他の2つのプロパティに)。
3つのタイプでX_Changedイベントを作成し、各オブジェクトを他の2つのオブジェクトイベントに登録することで、問題を解決できることを理解しています。私はこの「手動」の方法が好きではなく、3つのプロパティを一緒にバインドしたいと思います。
wpf - ボタン ControlTemplate へのファイルパスのマルチバインディング
別のリモート ファイルの場所に保存されている多数の画像を使用するアプリケーションを開発しようとしています。UI 要素へのファイル パスは、アプリケーション設定内に保存されます。MultiBinding と値コンバーターを使用してアプリケーション設定から画像にアクセスする方法は理解していますが、Multibinding を以下の ImageButton ControlTemplate に統合する方法がわかりません。誰かが私を正しい方向に導くことができますか?
wpf - 複数の値を単一のWPFTextBlockにバインドするにはどうすればよいですか?
私は現在、TextBlock
以下の名前のプロパティの値をバインドするために以下を使用していますName
:
ここで、同じという名前の別のプロパティをバインドしたいと思います。ID
TextBlock
2つ以上の値を同じものにバインドすることは可能TextBlock
ですか?単純な連結で実行できますName + ID
か?そうでない場合は、他にどのようにアプローチできますか?
wpf - FallbackValueはMultiBindingでどのように機能しますか?
うまくいかないようですのでお願いします。
次のオブジェクトにバインドしていると仮定します。
これに対してMultiBindingを使用すると、フォールバック値が表示されるように見えますね。
ただし、結果は実際には「から」になります。バインディングを強制的に返すことさえDependencyProperty.UnsetValue
機能しません:
TargetNullValueでも同じことを試しましたが、これもずっとバストでした。
したがって、MultiBindingがFallbackValueを使用することは決してないようです。これは本当ですか、それとも私は何かが足りませんか?
もう少しいじってみると、コンバーターが必要なUnsetValueを返すことができることがわかりました。
しかし、これは汚い汚いハックのようです。このようなシナリオは、フレームワークで説明されると思います。しかし、Reflectorには何も見つかりません。
wpf - MultiBinding の子バインディングのコンバーター
この MultiBinding があるとします。
これは機能していないようです: FooBarConverterに渡される値の配列にはDependencyProperty.UnsetValue
、各値 (この場合は 2 つ) が含まれます。子バインディング ( FooConverterおよびBarConverter ) のコンバーターを削除すると、実際の値が得られます。ちなみに、これらのコンバーターは適切に呼び出され、結果が破棄されたように見えます。
これは意図した動作ですか? 2 つのプロパティをバインドしたいのですが、それらを にスローする前に少なくとも 1 つを変換する必要がありMultiValueConverter
ます。