問題タブ [inotifycollectionchanged]

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 に答える
1106 参照

android - 双方向モードで MvxBindableListView をバインドできません

MvxBindableListViewTwoWayモードでバインドしようとしています。これは、 ViewModelで値を設定したときにビューで更新するためです(ボタンのクリック コマンドを使用)。現在、開始/タブ変更時にレイアウトが完全にロードされた場合にのみ更新されます...

ビューモデルは次のとおりです。

ビューの .axmlは次のとおりです。

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

c# - DataGrid がコレクションの IndexOf を呼び出して ItemcControl.ItemInfo 型のオブジェクトを渡すのはなぜですか?

選択したアイテムを両方向にバインドできるように作成SelectionHelperしました。 このヘルパーでは、ビューモデルから選択が変更されたときに、最初に選択された項目を呼び出します。呼び出しは正常に返されます。しかし、後で UI のメッセージ キューのどこかで何かが発生し、コレクションの IndexOf が呼び出されます。 UI の仮想化のため、非同期であると思われます。絶対に知りたいアイテムのインデックスです。しかし、なぜアイテムの代わりに置くのか理解できません。 これはバグですか、それとも文書化されていない機能ですか?DataGrid
ScrollIntoView
DataGridItemsControl.ItemInfo

私のコレクションはこれらのインターフェースを実装しています: IList<T>IListINotifyCollectionChanged

のコードは次のIndexOfとおりです。

そして、期待どおりに例外をスローします=)

アップデート

はい、私の推測は正しかったです。ここにDataGridのコードがありますScrollIntoView

アップデート の問題は、このアップデートで修正されています

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

c# - NotifyCollectionChangedEventArgs で変更された項目を取得する方法は?

コレクション (T: INPC) 内のオブジェクトのプロパティが変更されるたびに CollectionChangedEvent を発生させる ObservableCollection<T> を作成しました。T のどのプロパティが CollectionChangedEvent を発生させたのか知りたいので、次のことを試しました。

PropertyChangedEventArgs e を NotifyCollectionChangedEventArgs のコンストラクターに渡します。

Intellisense に従って、2 番目のコンストラクターは、NotifyCollectionChangedAction と、「変更によって影響を受けた項目」として記述される「changedObject」と呼ばれるオブジェクトの 2 つのパラメーターを取ります。

CollectionChangedEventHandler でそのオブジェクトを取得して、PropertyName を確認できると思ったのですが、ああ! サプライズ!NotifyCollectionChangedEventArgs は「ChangedObject」プロパティを公開しません (Action、NewItems、OldItems、NewStartingIndex、OldStartingIndex を確認できます)。

これを達成する方法についてのアイデアはありますか?ところで、後でアクセスできないオブジェクトを使用して NotifyCollectionChangedEventArgs を構築する必要があるのは何ですか?

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

windows-8 - WinRT では、ItemsControl を更新しない INotifyCollectionChanged を実装するコレクション

INotifyCollectionChanged も実装する独自のコレクション クラスを作成しています。Windows 8 ストア アプリケーション (winRT) で使用しています。リストの内容を変更すると、「通常の」監視可能なコレクションが発生させるのと同じイベントで、すべての適切なイベントが発生することを証明する単体テストを作成しました。それでも、ItemsControl の ItemsSource プロパティをコレクションにバインドすると (GridView、ListView、さらには普通の ItemsControl も試しました)、コレクションが変更されても UI には影響しません。

基礎となるコレクション型は、それが機能するために ObservableCollection である必要がありますか、それとも独自のコレクション クラスを作成することは可能ですか?

thnx

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

c# - 計算されたプロパティの依存関係ツリーを更新する最良の方法は何ですか?

ここには、多かれ少なかれ互いに依存しているクラスがいくつかあります。リレーションシップは、依存関係ツリーのようなものです。

_bsそのため、_csまたは変更されるたびに、ValueOfCそれらに関連するすべてのプロパティも変更されたことが通知され、再計算される必要があります。

この目標を一貫して確実に達成するための最良の方法は何ですか? これを自動的に行う方法はありますか?

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

mvvm - Observable Collection MVVM でプロパティが変更されたときに通知する

監視可能なコレクションを DataGrid にバインドしようとしています。データグリッドで行が編集されたときに通知したいと考えています。私のコードは、レコードが追加または削除されたときに通知するのに問題なく動作しますが、レコードが編集されたときに通知しません。これが MVVM で監視可能なコレクションを使用してバインドする正しい方法であるかどうか、および何か不足しているかどうかをお知らせください。前もって感謝します。

そしてxamlは

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

wpf - コレクションを含むwpf添付プロパティが更新されない

アプリケーションとカスタムUsercontrolの間でリストを共有するのが好きです。添付プロパティとしてIEnumerableを使用して、カスタムUserControl内のリストボックスにリストを提供します。次に、ListBoxは添付されたプロパティをItemsSourceとして受け取ります。これは今のところ機能します。ただし、ホストリストが変更されると、usercontrol内のリストが更新されます。どうすればこれを達成できますか?現在のコードはUsercontrolリストを設定しますが、ホストがリストを変更しても、添付されたプロパティは更新されません。

UserControlを使用するホストにはComboBoxがあり、ItemsSourceをUserControlのListBoxと共有する必要があります

ホストのXamlは、ComboBoxをコレクションにバインドします。

ホスト内に配置されたUsercontrolは、添付プロパティを介してコレクションを受け取ります。バインディングは重く見えますが、問題ないようです。

アタッチされたプロパティにはコールバックがあり、現在は1回だけ呼び出されます。

OnDynamicListPropertyChanged()は、ホストのPersonListが変更されるたびに呼び出す必要があります。添付プロパティ内にINotifyCollectionChangedを配置する必要がありますか?もしそうなら、どこでどのように?

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

data-binding - INotifyCollectionChanged は、データバインドされたコントロールを更新するには不十分ですか?

バインド可能なコレクション (特殊なスタック) を実装しようとしています。これは、Windows 8 アプリの 1 つのページに表示する必要があり、更新が行われるたびに表示されます。このために、INotifyCollectionChanged と IEnumerable<> を実装しました。

このコレクション クラスは、ページが所有する基になるクラス インスタンスのプロパティを定義するために使用されます。これは、その DataContext (ページの Calculator プロパティ) として設定され、GridView にバインドされます。

バインディングは、ページが移動されたときに最初に機能します。スタック内の既存のアイテムは問題なく表示されますが、スタックに追加された/スタックから削除されたアイテムは、ページが移動されて戻るまで GridView に反映されません。デバッグにより、スタック内の CollectionChanged イベントが常に null であるため、更新時に呼び出されないことがわかります。

私は何が欠けていますか?

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

c# - UI が INotifyCollectionChanged にバインドされていない

INotifyCollectionChanged を実装するコレクションがあります。

xamlで使用されます

次にxaml.csで

コレクションアイテムは問題なく表示されます。ただし、UI はサブスクライブせず、起動CollectionChangedされたときにそれ自体を更新しません。CollectionChangedUI コントロールをイベントにサブスクライブさせるには、さらにインターフェイスを実装する必要があるのではないでしょうか?

PS ObservableCollection を使用できません。これは、コンパイラが「Windows ランタイム インターフェイスではない」と言っているからです。

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

wpf - INotifyCollectionChangedタイプに対するデータバインディング

ドメインモデルコレクションクラスと、ドメインモデルの要素を反映して投影するだけのビューモデルクラスが必要ですが、それ自体は読み取り専用です。

ここでの私の考えは、両方のタイプがINotifyCollectionChangedインターフェイスを実装し、ビューモデルタイプが、モデル要素を要素ビューモデルタイプにラップするプロキシおよびプロジェクターとして機能することです。

問題は、INotifyCollectionChangedを実装することで、たとえばDataGridやListViewへのWPFデータバインディングを有効にするのに十分ですか、それともコレクションベースのデータバインディングを有効にするために必要なインターフェイスの最小セットは何ですか?