問題タブ [two-way-binding]
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.
validation - 双方向マルチバインディング検証
ex、textbox1 のマルチバインディングがあり、その値は textbox2 と textbox3 に依存し、バインディングは双方向であり、マイナスの場合、ex エラーに対してすべてのテキストボックスが同じ検証ルールを適用する場合があります。
どういうわけか、textbox1 が更新された場合、textbox2 と textbox3 の検証が開始されます。ただし、textbox2 または textbox3 のいずれかが更新されると、textbox1 の検証は実行されません。
- ValidatesOnTargetUpdated="True" を設定しようとしましたが、何も起こりませんでした。
何かアドバイス?
wpf - WPFバインドユーザー制御座標
キャンバスにユーザーコントロールを追加しました。アプリケーションの別の領域に、XとYの2つの値を取得する2つのTextBoxがあります。ユーザーコントロールの左上隅の座標とそれらの2つのテキストボックスの間に双方向のバインディングが必要です。コンバーターを実装したり、計算を行ったりしてもかまいませんが、正しい方向に進む必要があります。
c# - C# MVVM TreeView 階層データの双方向バインディング
私はこれに対する答えを2週間以上グーグルで検索しました。これは通常、私が盲目であるか、その考えがばかげていることを意味します。いずれかの方法:
中規模で非常に柔軟なプロジェクトで、構成データを次のような階層構造に格納しています。
- 構成 (コレクション)
- オーディオ (クラス)
- BaseDir (構造体)
- PlayMode (列挙型)
- 入力 (クラス)
- CalibrateOnConnect (ブール値)
- KnownDevices (コレクション)
- ... (クラス)
- ...
- ... (クラス)
- UseDevice (整数)
- プレイリスト(コレクション)
- FirstAudio (クラス)
- パス (文字列)
- 繰り返し (整数)
- FirstAudio (クラス)
- ...
- オーディオ (クラス)
これらを MVVM パターンの TreeView に表示することができました。将来どのオプションが追加されるか正確にはわからないので、一般的なアプローチを使用して、 、カスタムおよび基本値型 ( 、、、...) の ViewModelclass
を作成ienumerable
しstructs
ましstring
た。bool
enum
私の XAML では、これらには対応する (階層型) DataTemplates があります。たとえば、ブール値の CheckBox や一般的な値の型のテキストブロックがあります。
各 ViewModel インスタンスには、基になるモデルのデータを格納するフィールドがあります。
これらの値を View で編集し、TwoWay-Binding を介して ViewModel でも編集できます。
しかし、モデルでこのデータを更新する方法が頭を悩ませています。
リフレクションによって階層的な ViewModel 構造を作成するため、親には、同等の構成クラス / コレクションのフィールド名 / インデクサー / ... に対応する get/set プロパティがありません。各 ViewModel インスタンスは、それが作成された親のモデルのデータ構造のフィールド/プロパティ名を認識しており、親の ViewModel インスタンスも認識しています (ただし、親の Model インスタンスは認識していません)。
コマンドを介して、または親の更新機能を呼び出してこの問題を解決しようとするたびに、私の脳に結び目ができました。
通常のバインディング手法でこれを達成する簡単な方法はありませんか?
使用している構成 (サブ) クラスごとに ViewModel を作成したほうがよいでしょうか?
ヒント: 各 ViewModel インスタンスは、親のモデルのデータ構造でそのフィールド/プロパティ名を認識しています。
c# - 階層データ構造の MVVM に編集を追加する
この質問は、この古い質問のフォローアップであり、未解決の質問というよりも確認です。
私の ViewModel インスタンスには、Model のプライベート インスタンスがあります_modelInst
。
ViewModel は、編集中にモデルのデータに排他的にアクセスできます (したがって、モデルは INotifyPropertyChanged を実装する必要はありません)。
ビューからモデルデータを編集する方法を思いついたのは、次の 3 つの方法です。
単純な値フィールドなど、Model インスタンスで直接取得/設定する
これは 簡単に実装できます...
return _modelInst.fieldname;
_modelInst.fieldname = value;
ViewModel インスタンスを作成し、親のデータ構造を操作します (
例: structs のようなより複雑なオブジェクト タイプの場合)。- その型の新しい ViewModel を作成します。
ViewModel は、親とそのフィールド名を認識しています。 - それを ContentControl+DataTemplate に表示する
- 取得/設定:
パラメータとしてフィールド名を持つ親のメソッドを介して、
1 つのフィールドのみが変更された場合でも元のオブジェクト全体を上書きします
_modelInst
これは、これらの構造のそれぞれに対して、親によって実装された新しいインターフェイスを作成することを意味します (更新ルーチンは で動作します)。- その型の新しい ViewModel を作成します。
親クラス内のクラス (のリスト) など、親のデータ構造を直接認識せずに ViewModel インスタンスを作成するクラスごとに新しい ViewModel を作成する
経由で親に更新指示を送信する
- コマンド
- メッセージ
- リフレクション (親
は、インスタンスを格納されているすべての子と比較することにより、関数を呼び出した子を認識します)
これらはすべて、編集可能なモデルのすべてのフィールドに対して関数を作成し、実装するのが非常に面倒です。
これは、モデルのほぼすべてのフィールドを意味します...
(4.) リフレクションのみを介して機能する一般的な ViewModel を作成できます。ここで、各サブオブジェクトはその親とそのフィールド名 (リストの場合は +index) を認識します。
ルートのロジックのみがモデルに干渉します。
しかし、その解決策には、フィールドへのパスを 内に格納する手段も必要です_modelInst
。
これを達成するための他の(より簡単な)方法はありますか?
MVVM の原則を (また) 誤解していましたか?
MVVM は大規模な階層データ構造の操作に適していますか?
wpf - コード ビハインドからの wpf 双方向バインディングと更新
XAML で次のように ToggleButton を定義しました。
および「DateFilter」は次のように定義されています。
トグル ボタンをクリックすると、それに応じて「DateFilter」が更新されます。しかし、コードで「DateFilter」を変更すると、ToggleButton が更新されません!
どうやってやるの?
silverlight - Silverlight: DependencyProperty (IList) の双方向バインディングが機能しない
まあ..それは機能しますが、ユーザーがリスト型のプロパティを作成した場合にのみ機能します。
これが完全なシナリオです。
テンプレート化されたコントロール(チェックボックス付きの複数選択コンボボックス)があります。ユーザーは、ItemsSource として List/ObservableCollection を指定します。コレクションは、任意のタイプ (Employee、Chair、Person など) にすることができます。ItemsSource の DependencyProperty はタイプ IList です。
ユーザーは、SelectedItems と呼ばれる DependencyProperty で双方向バインディングを使用して List を指定することもできます (そのため、一部のアイテムをチェック済みとして表示し、チェック済みのアイテムを取得できます)。
問題は SelectedItems dp にあります。テンプレート化されたコントロールでは IList 型です。ユーザーがバインドしている場合、双方向バインディングは機能しませんList<Person>
。しかし、List<Person>
を に変更すると機能しList<object>
ます。
私は自分が正しくしていないことが何であるかを理解できません!
silverlight - Silverlight 双方向バインディングを使用して MVVM モデルで Null オブジェクトを取得します
Silverlight は初めてで、MVVM パターンを使用して RIA サービス経由でフォームをデータベースに保存しようとしています。
バインド モードでテキスト ボックスを文字列にバインドすると、ViewModel でテキスト ボックスの値を取得しtwoway
ます。
しかしObject.Property
、テキスト ボックス (双方向バインディング) にバインドすると、保存ボタンをクリックした後、ViewModel にnull オブジェクトが表示されます。
これが私のコードです。どこが間違っているのかを理解してください。
ここに私のXAMLがあります:
c# - チェックボックスの双方向バインディング
リストにバインドされたリストボックスがあります。リストには、リストのフィールド/メンバーにバインドされたチェックボックスが含まれています。私が達成したいのは、対応するチェックボックスがチェックされているときにリストからデータを削除したいということです。
ここに私のxamlコードがあります:
.cs ファイルのコードは次のとおりです。
c# - コンバーターを使用した双方向データバインディングはソースを更新しません
厄介なXMLソースを表示および編集に便利な内部クラスのツリーに変換するために、コンバーターを使用してデータバインディングを設定しました。すべてがXMLソースからの読み取りに最適ですが、内部クラスに加えられた変更を取得してXMLソースに伝播するのに時間がかかるのです。
使用サイトのXAMLは次のとおりです。
XmlSourceは、親データバインドオブジェクトのCLR読み取り/書き込みプロパティ(DependencyPropertyではない)です。これは、XSDから生成された.NETタイプです。
SampleConverterはを実装しIValueConverter
ます。Convert
メソッドが呼び出され、null以外のデータが返されますが、メソッドConvertBack
が呼び出されることはありません。
SampleControlは、サンプルデータツリーとのUIインタラクションをカプセル化するUserControlです。XAMLは次のようになります。
Sampleプロパティは、以下の背後にあるSampleControlコードのDependencyPropertyです。
XmlSourceがINotifyPropertyChangedを実装するために変換され、上記のMyPropertyChangedのブレークポイントで示されているように、ツリーの上位に変更通知を送信している内部クラス。
では、データが変更されたことを報告している場合、WPFがコンバーターのConvertBackメソッドを呼び出さないのはなぜですか?
wpf - WPF ComboBox SelectedItem バインディング
私は WPF ComboBox を持っており、MVVM を使用して ItemsSource プロパティと SelectedItem プロパティをバインドしています。基本的に私がやりたいことは、ユーザーがコンボボックスで特定のアイテムを選択すると、代わりにコンボボックスが別のアイテムを選択することです。
デモ用に、SelectedItem を更新するボタンもあります。
私は私のビューモデルにこれを持っています:
わかりましたので、ユーザーがアイテム「all」を選択するたびに、ComboBox にアイテム「items」を選択させたいと思います。ボタンを使用して、コンボボックスの SelectedItem を更新でき、これが UI に反映されていることがわかります
TestComboItemsSourceSelected プロパティのセッターで viewModel を更新する同様のロジックがあります。ユーザーが "all" を選択した場合は、代わりに SelectedItem を "items" に設定します。コード的には、viewmodel プロパティが変更されますが、これは何らかの理由で UI に反映されません。何か不足していますか?私がこれを実装した方法の何らかの副作用はありますか?