問題タブ [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.
wpf - 静的プロパティへのComboBoxの双方向バインディング
- - - -編集 - - -
だから、私は私のコードが正しいと思いました、そしてあなたのすべての答えからのコードスニペットも正しいと思いました。それをありがとう。私の問題は、私のdev-maschineが異なる動作をする.NET4.5を実行していることです!まったく同じプログラム(.NET4.0に対してコンパイルされたもの)は、.NET4.0のマシンでは正しく実行されますが、.NET4.5のマシンでは正しく実行されません。
だからここに私の改訂された質問があります。
- - - -編集 - - -
まず、コンボボックスをデータコンテキストに双方向でバインドする簡単な例を次に示します。
モデルを見る:
およびコードビハインド
と私のxaml
これは正常に機能し、コンボボックスでアイテムを選択すると、ビューモデルにバインドされます。
OK、今度はviewModelを静的にしたいのですが、それでもselectedItemを双方向でバインドします。私はこれを試してみます:
コードビハインドでデータコンテキストを設定する必要はもうありません。xamlには双方向バインディング用のインスタンスが必要であることがわかっているので、デフォルトのコンストラクターを使用しています。次に、コンボボックスをバインドします
初期値は適切にバインドされていますが、コンボボックスで別のアイテムを選択すると、viewModelに反映されません。私は何が間違っているのですか?
編集:
TextBoxにまったく同じバインディング文字列を使用し、ボックス内のテキストを変更すると、プロパティに反映されます。
したがって、明らかに私のバインディング文字列は正しいですが、コンボボックスの使用方法が間違っているようです。SelectedValue
私も代わりにバインドしようとしました...変更もありません。
xaml - .NET4.5の静的プロパティへのComboBoxの双方向バインディング
さて、私はこの質問を投稿したばかりですが、私は何も悪いことをしていないと思いました。私のコード(およびすべての回答のコード)は正しいですが、私のdev-maschineは.NET4.5で実行されており、コンボボックスのバインドに問題があるようです...
それで、ここに質問の新しいバージョンがあります:コンボボックスのSelectedItemを.NET4.5の静的プロパティに双方向でバインドする方法は?
次のコードスニペットは.net4では機能しますが、.NET4.5では機能しません。4.5では、選択した値が静的プロパティに伝播されないだけです。
私のViewModel:
そして私のXAML
ComboBoxのSelectedItemを.NET4.5の静的プロパティに双方向でバインドする方法を知っている人はいますか?
c# - 双方向バインディングにはPathまたはXPathが必要というメッセージが表示されるのはなぜですか。
実行時にとを作成し、TextBox
実行TextBlock
時にデータベースフィールドにバインドします。コードは以下のとおりです。
しかし、私はこのメッセージを受け取っています:
双方向バインディングには、PathまたはXPathが必要です。
どこが間違っているのですか?
wpf - 逆双方向-マルチバインディング
ビューモデルの列挙プロパティを、ビューのラジオボタンのセットとして表現しようとしています。ここまでは順調ですね; 私はそれを双方向で表現することができますMultiBinding
:
(rb1.IsChecked、rb2.IsChecked、rb3.IsChecked)<-> vm.Value
ここで使用されるマルチバインディングは、(bool, bool, bool) <-> MyValue
;間で変換するマルチコンバーターを備えています。明らかに、タイプの(3つの)許容値の1つは、に基づいMyValue
て選択され、その逆も同様です。bool
true
ただし、これはすでに少し不便です。マルチバインディングは単一の値の側から定義する必要があるため、ビューの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
を持っているかどうかを判断する方法がないことです。rbA2
rbB2
- 最初に、 1つのプロパティのみを公開するラジオグループコントロールを定義して、ラジオボタングループを抽象化し
SelectedIndex
ます。このプロパティは、ラジオグループコントロールvm.Value
のすべてのインスタンスからプロパティに便利にバインドできます。実行可能ですが、新しい制御クラスを作成する必要があり、これがWPFでの唯一の方法であるかどうか疑問に思います。 - あるラジオボタンのセットを別のラジオボタンにバインドする:、、などに双方向でバインド
rbB1
しrbA1
、ラジオボタンの最初のセットとの間でのみマルチバインドを使用するとrbB2
、目的の効果が得られますが、 「マスターラジオグループ」を持つという概念は好きではありません。データ転送のためにGUI要素を悪用することになります。rbA2
vm.Value
- コードビハインドですべてを実行し、ラジオボタンとビューモデル値を手動で更新します。もちろん、これは実行可能なフォールバックソリューションですが、これはXaml /バインディングを使用して実行可能であると思われます。
c# - ObservableCollectionをWPFのDataGridにバインドするTwoWayが機能しない
私のアプリケーションには、この単純なDataGridがあります。ソースのどこかで、そのItemsSource
プロパティをにバインドしますObservableCollection<System.Windows.Points>
。したがって、ポイントはに表示されますDataGrid
。問題は、TwoWay
バインディングを設定したことですが、のポイント座標値を変更してもDataGrid
、実際のポイント値ObservableCollection
は変更されません。
何が問題になっていますか?
私はこれを見たことがありますが、私の問題は異なります。
c# - WPF TwoWay は X (終了) では機能しませんが、TAB または他の場所をクリックすると機能します
私のXAMLには次のものがあります:
TitleValue または DescValue と Tab のいずれかに値を入力するか、ウィンドウ内の別の場所をクリックすると、コレクション クラスのプロパティが正しく更新されます。X をクリックしてウィンドウを終了すると、コレクション クラスのデータが正しく保存されます。
ただし、これらのフィールドのいずれかに値を入力し、X をクリックしてウィンドウを終了すると、コレクション クラスのデータは保存されますが、入力した値は、X をクリックしたときに編集していた特定のフィールドには保存されません。
フィールドにフォーカスを失うイベントを実装しましたが、X をクリックしても機能します。これらのイベントでは、コードを入れました:
しかし、それもうまくいきませんでした。以下も機能しません。
編集中のフィールドで X がクリックされたときに、選択したクラス Imports を更新するコレクション クラス Imports を取得するにはどうすればよいですか?
編集中のフィールドをタブで移動したり、ウィンドウの他の場所をクリックしたりしたのとまったく同じように機能するはずです。
wpf - DataGridTemplateColumn 双方向バインディングが機能しない
I've got a DataGrid
I've bound to a SqlDataApter
. DataTextColumn
以下のコードに示すように、グリッドの XAML をセットアップすると、完全に機能します。
私はこれをDataTable
コード内にバインドしています:
また、「SqlDataAdapter」更新メソッドを使用して変更を保存するボタンがあります。
問題は、レコードc とレコード c のときIC_DEF_CHAR_TEXT
にフィールドの編集を無効にしたいことです。プロパティにバインドしようとしましたが、バインドできないことがわかったので、2 つのフィールドのテンプレートを作成し、プロパティをおよびフィールドにバインドしました。isNumeri
IC_DEF_CHAR_TEXT
IsText
IsReadOnly
IsEnabled
IsText
IsNumeric
これは私が望んでいたとおりに機能し、必要に応じてテキストボックスが有効になりました。ただし、 で行われた変更は、TextBoxes
更新中にデータベースに保存されなくなりました。データベースが更新されなくなった理由を誰か説明してもらえますか?
wpf - 双方向バインディング リストボックス - アイテムの削除
コレクションからアイテムを取得するListBox
(x:Name = notesList
) が WPF アプリケーションにあります。ItemsSource
コレクションはNotes
私のクラスのプロパティでData
あり、タイプはObservableCollection<Note>
です。私はそれをこのようにバインドします: (data
は にData
いくつかのアイテムを持つオブジェクトですNotes
)
バインディングが機能し、アイテムが ListBox に表示されます。notesList
とNotes
コレクションを同期させたいので、TwoWay バインディングを設定します。この方法で選択したアイテムを削除しようとすると、問題が発生します。
例外が発生します:「ItemsSource が使用されている間、操作は無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更してください」。
私の質問: コレクション関数を使用して要素を削除する必要がありますか? data.Notes.RemoveAt(index)
? ListBox
クラスを使用してアイテムを削除する方法はありますか?その結果、コレクション内のアイテムが削除されますか? TwoWay Binding を使えば可能になると思いました。