GUI上にデータソースにバインドされたGridView
要素があります。私はINotifyPropertyChanged
を使用することにしました。自動的に更新するクラスを変更できるようにすることで対話を簡素化します。GridView.
この時点までクロススレッドには何の問題もありませんでしたが、 (GridViewを変更する)が、UI以外のスレッドで発生しています。私はinvoke
を使用して私の問題を解決しましたが、INotifyPropertyChanged
を実装してGridView
にバインドしているとき、どのようにしたらよいか分かりません。どんな助けも非常に高く評価されるでしょう!INotifyPropertyChangedバインディングとクロススレッディングのエラー
3
A
答えて
0
グリッドに関連付けられた観測可能なコレクションがあるとします。グリッドがビューです。
データを取得するためにコールアウトが行われると、コールアウトはデータを返すために非同期になります。非同期イベントハンドラでは、あなたのビューモデルクラスでこのような何かをしたいと思う:
/// <summary>
/// This is what is bound to the UI
/// </summary>
private ObservableCollection<UserDTO> _Users;
/// <summary>
/// Collection of Users
/// </summary>
public ObservableCollection<UserDTO> Users
{
get
{
return _Users;
}
set
{
if (_Users != value)
{
_Users = value;
OnPropertyChanged("Users");
}
}
}
/// <summary>
/// Asynchronous Callback For Get Users
/// </summary>
private void UserAgentGetCompleted(object sender, List<UserDto> users)
{
//Make sure we are on the UI thread
this.Dispatcher.BeginInvoke(() => SetUsers(users));
}
はその後SetUsersには、ビュー(グリッド)にバインドされたデータであり、監視可能なコレクション(_Users)を更新します。観測可能なコレクションが更新されるため、変更は依存関係プロパティを介してビューにバインドされているため、ビューに反映されます。
私はSetUsers()コードを省略しましたが、受信ユーザーリストを観測可能なコレクションに設定するだけです。
関連する問題
- 1. バインディングとINotifyPropertyChanged
- 2. INotifyPropertyChanged implentation、バインディングが機能しません
- 3. クロススレッディングC#
- 4. UWPクロススレッディング情報
- 5. Form.Show対Form.ShowDialogクロススレッディング
- 6. なぜWPFのバインディングでINotifyPropertyChangedを使用するのですか?
- 7. WPF - Datagridバインディング:InotifyPropertyChangedおよびBackgroundWorker UI更新なし
- 8. バインディングはINotifyPropertyChangedなしで動作します、なぜですか?
- 9. ListViewバインディングINotifyPropertyChangedが正しく機能しない
- 10. INotifyPropertyChangedとpropertyName
- 11. INotifyPropertyChangedとObservableCollection WPF
- 12. INotifyPropertyChangedの
- 13. INotifyPropertyChangedとBaseClassのプロパティC#
- 14. WPF双方向モードのバインディングは、INotifyPropertyChangedを使用していません。
- 15. クロススレッディング例外 - 呼び出しを使用
- 16. レイヤードINotifyPropertyChanged
- 17. WinformsデータバインディングとINotifyPropertyChangedモノで
- 18. WPF UserControlをコードで作成し、INotifyPropertyChangedで登録していないバインディング
- 19. INotifyPropertyChangedと単一の値のObservableCollection
- 20. INotifyPropertyChanged 'Double' binding
- 21. MVVM INotifyPropertyChanged not working
- 22. WPFでINotifyPropertyChanged
- 23. WCF DataContractsでINotifyPropertyChanged
- 24. INotifyPropertyChanged - 常にnull
- 25. Excel 2016と遅いバインディングでアクティブXエラー
- 26. バインディング式エラーの例外
- 27. INotifyPropertyChangedのdoesntの仕事(UWP
- 28. スタイル内のテキストボックスのINotifyPropertyChanged
- 29. INotifyPropertyChanged以外何か?
- 30. スレッドによるINotifyPropertyChanged
他のスレッドがディスパッチャを使用するようにUIスレッドを使用してクラスを「変更する」必要があります。 – vcsjones
クラス内の変数への追加を呼び出すと、クラスが変更されます: 'class.Elements.Add(...);'。だからあなたは、ディスパッチャーを使ってその電話をかけることを言っていますか? – avivas