問題タブ [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.

0 投票する
2 に答える
9379 参照

wpf - 静的プロパティへのComboBoxの双方向バインディング

- - - -編集 - - -

だから、私は私のコードが正しいと思いました、そしてあなたのすべての答えからのコードスニペットも正しいと思いました。それをありがとう。私の問題は、私のdev-maschineが異なる動作をする.NET4.5を実行していることです!まったく同じプログラム(.NET4.0に対してコンパイルされたもの)は、.NET4.0のマシンでは正しく実行されますが、.NET4.5のマシンでは正しく実行されません。

だからここに私の改訂された質問があります。

- - - -編集 - - -

まず、コンボボックスをデータコンテキストに双方向でバインドする簡単な例を次に示します。

モデルを見る:

およびコードビハインド

と私のxaml

これは正常に機能し、コンボボックスでアイテムを選択すると、ビューモデルにバインドされます。

OK、今度はviewModelを静的にしたいのですが、それでもselectedItemを双方向でバインドします。私はこれを試してみます:

コードビハインドでデータコンテキストを設定する必要はもうありません。xamlには双方向バインディング用のインスタンスが必要であることがわかっているので、デフォルトのコンストラクターを使用しています。次に、コンボボックスをバインドします

初期値は適切にバインドされていますが、コンボボックスで別のアイテムを選択すると、viewModelに反映されません。私は何が間違っているのですか?

編集:

TextBoxにまったく同じバインディング文字列を使用し、ボックス内のテキストを変更すると、プロパティに反映されます。

したがって、明らかに私のバインディング文字列は正しいですが、コンボボックスの使用方法が間違っているようです。SelectedValue私も代わりにバインドしようとしました...変更もありません。

0 投票する
1 に答える
542 参照

xaml - .NET4.5の静的プロパティへのComboBoxの双方向バインディング

さて、私はこの質問を投稿したばかりですが、私は何も悪いことをしていないと思いました。私のコード(およびすべての回答のコード)は正しいですが、私のdev-maschineは.NET4.5で実行されており、コンボボックスのバインドに問題があるようです...

それで、ここに質問の新しいバージョンがあります:コンボボックスのSelectedItemを.NET4.5の静的プロパティに双方向でバインドする方法は?

次のコードスニペットは.net4では機能しますが、.NET4.5では機能しません。4.5では、選択した値が静的プロパティに伝播されないだけです。

私のViewModel:

そして私のXAML

ComboBoxのSelectedItemを.NET4.5の静的プロパティに双方向でバインドする方法を知っている人はいますか?

0 投票する
2 に答える
5645 参照

c# - 双方向バインディングにはPathまたはXPathが必要というメッセージが表示されるのはなぜですか。

実行時にとを作成し、TextBox実行TextBlock時にデータベースフィールドにバインドします。コードは以下のとおりです。

しかし、私はこのメッセージを受け取っています:

双方向バインディングには、PathまたはXPathが必要です。

どこが間違っているのですか?

0 投票する
2 に答える
1118 参照

wpf - 逆双方向-マルチバインディング

ビューモデルの列挙プロパティを、ビューのラジオボタンのセットとして表現しようとしています。ここまでは順調ですね; 私はそれを双方向で表現することができますMultiBinding

(rb1.IsChecked、rb2.IsChecked、rb3.IsChecked)<-> vm.Value

ここで使用されるマルチバインディングは、(bool, bool, bool) <-> MyValue;間で変換するマルチコンバーターを備えています。明らかに、タイプの(3つの)許容値の1つは、に基づいMyValueて選択され、その逆も同様です。booltrue

ただし、これはすでに少し不便です。マルチバインディングは単一の値の側から定義する必要があるため、ビューのXamlでそのバインディングを定義することはできません。したがって、コードビハインドでマルチバインディングを定義SetBindingし、ビューモデルのValueプロパティでsetを使用する必要があります。

さて、私が立ち往生している問題は、ラジオボタンの1つのセットをその値にバインドするだけでなく、2つをバインドしていることです。したがって、私のバインディングは次のようになります。

(rbA1.IsChecked、rbA2.IsChecked、rbA3.IsChecked)<-> vm.Value <->(rbB1.IsChecked、rbB2.IsChecked、rbB3.IsChecked)

SetBinding問題は、一度に複数のバインディングを接続するために使用できないことvm.Valueです。

私がこれまでに試した解決策は次のとおりです。

  • 1つの大きなマルチバインディングを使用して、一度にすべてのラジオボタンにバインドします。これは、フォームのバインドを意味し(rbA1.IsChecked, rbA2.IsChecked, rbA3.IsChecked, rbB1.IsChecked, rbB2.IsChecked, rbB3.IsChecked) <-> vm.Valueます。このソリューションの問題は、ラジオボタンの1つ(たとえば)がチェックされている場合、 (チェックされていない)または(チェックされている)が「新しい正しい」値rbB2を持っているかどうかを判断する方法がないことです。rbA2rbB2
  • 最初に、 1つのプロパティのみを公開するラジオグループコントロールを定義して、ラジオボタングループを抽象化しSelectedIndexます。このプロパティは、ラジオグループコントロールvm.Valueのすべてのインスタンスからプロパティに便利にバインドできます。実行可能ですが、新しい制御クラスを作成する必要があり、これがWPFでの唯一の方法であるかどうか疑問に思います。
  • あるラジオボタンのセットを別のラジオボタンにバインドする:、、などに双方向でバインドrbB1rbA1、ラジオボタンの最初のセットとの間でのみマルチバインドを使用するとrbB2、目的の効果が得られますが、 「マスターラジオグループ」を持つという概念は好きではありません。データ転送のためにGUI要素を悪用することになります。rbA2vm.Value
  • コードビハインドですべてを実行し、ラジオボタンとビューモデル値を手動で更新します。もちろん、これは実行可能なフォールバックソリューションですが、これはXaml /バインディングを使用して実行可能であると思われます。
0 投票する
1 に答える
8297 参照

c# - ObservableCollectionをWPFのDataGridにバインドするTwoWayが機能しない

私のアプリケーションには、この単純なDataGridがあります。ソースのどこかで、そのItemsSourceプロパティをにバインドしますObservableCollection<System.Windows.Points>。したがって、ポイントはに表示されますDataGrid。問題は、TwoWayバインディングを設定したことですが、のポイント座標値を変更してもDataGrid、実際のポイント値ObservableCollectionは変更されません。

何が問題になっていますか?

私はこれを見たことがありますが、私の問題は異なります。

0 投票する
1 に答える
122 参照

c# - WPF TwoWay は X (終了) では機能しませんが、TAB または他の場所をクリックすると機能します

私のXAMLには次のものがあります:

TitleValue または DescValue と Tab のいずれかに値を入力するか、ウィンドウ内の別の場所をクリックすると、コレクション クラスのプロパティが正しく更新されます。X をクリックしてウィンドウを終了すると、コレクション クラスのデータが正しく保存されます。

ただし、これらのフィールドのいずれかに値を入力し、X をクリックしてウィンドウを終了すると、コレクション クラスのデータは保存されますが、入力した値は、X をクリックしたときに編集していた特定のフィールドには保存されません。

フィールドにフォーカスを失うイベントを実装しましたが、X をクリックしても機能します。これらのイベントでは、コードを入れました:

しかし、それもうまくいきませんでした。以下も機能しません。

編集中のフィールドで X がクリックされたときに、選択したクラス Imports を更新するコレクション クラス Imports を取得するにはどうすればよいですか?

編集中のフィールドをタブで移動したり、ウィンドウの他の場所をクリックしたりしたのとまったく同じように機能するはずです。

0 投票する
2 に答える
13290 参照

wpf - DataGridTemplateColumn 双方向バインディングが機能しない

I've got a DataGridI've bound to a SqlDataApter. DataTextColumn以下のコードに示すように、グリッドの XAML をセットアップすると、完全に機能します。

私はこれをDataTableコード内にバインドしています:

また、「SqlDataAdapter」更新メソッドを使用して変更を保存するボタンがあります。

問題は、レコードc とレコード c のときIC_DEF_CHAR_TEXTにフィールドの編集を無効にしたいことです。プロパティにバインドしようとしましたが、バインドできないことがわかったので、2 つのフィールドのテンプレートを作成し、プロパティをおよびフィールドにバインドしました。isNumeriIC_DEF_CHAR_TEXTIsTextIsReadOnlyIsEnabledIsTextIsNumeric

これは私が望んでいたとおりに機能し、必要に応じてテキストボックスが有効になりました。ただし、 で行われた変更は、TextBoxes更新中にデータベースに保存されなくなりました。データベースが更新されなくなった理由を誰か説明してもらえますか?

0 投票する
1 に答える
736 参照

wpf - 双方向バインディング リストボックス - アイテムの削除

コレクションからアイテムを取得するListBox(x:Name = notesList) が WPF アプリケーションにあります。ItemsSourceコレクションはNotes私のクラスのプロパティでDataあり、タイプはObservableCollection<Note>です。私はそれをこのようにバインドします: (dataは にDataいくつかのアイテムを持つオブジェクトですNotes)

バインディングが機能し、アイテムが ListBox に表示されます。notesListNotesコレクションを同期させたいので、TwoWay バインディングを設定します。この方法で選択したアイテムを削除しようとすると、問題が発生します。

例外が発生します:「ItemsSource が使用されている間、操作は無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更してください」。

私の質問: コレクション関数を使用して要素を削除する必要がありますか? data.Notes.RemoveAt(index)? ListBoxクラスを使用してアイテムを削除する方法はありますか?その結果、コレクション内のアイテムが削除されますか? TwoWay Binding を使えば可能になると思いました。