Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengubah suai ObservableCollection Daripada Benang Bukan Penghantar dalam WPF?

Bagaimana untuk mengubah suai ObservableCollection Daripada Benang Bukan Penghantar dalam WPF?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 20:06:01870semak imbas

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"Jenis CollectionView Ini Tidak Menyokong Perubahan kepada Koleksi Sumbernya daripada Benang Berbeza daripada Benang Penghantar"

Penerangan Masalah

DataGrid terikat kepada ObservableCollection yang dihuni secara tidak segerak melemparkan ralat yang menyatakan bahawa perubahan pada SourceCollection tidak dibenarkan daripada urutan bukan Penghantar.

Penyelesaian

Masalah timbul daripada pertalian benang. ObservableCollection pada mulanya dibuat pada utas UI, menjadikannya hanya boleh diakses daripada utas UI. Untuk mengubah suainya daripada urutan lain, perwakilan mesti diletakkan pada Penghantar UI.

Kod ViewModel yang Dikemas kini

<code class="csharp">public void Load()
{
    matchList = new List<GetMatchDetailsDC>();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}</code>

Dengan memanggil perwakilan pada Penghantar UI, penambahan pada ObservableCollection dijadualkan pada urutan UI, menyelesaikan pengecualian.

Pengikatan dan Penyegaran Dipertingkatkan

Untuk pengikatan dan penyegaran tak segerak DataGrid, pertimbangkan untuk menggunakan INotifyPropertyChanged pada sifat ViewModel anda dan menggunakan Dispatcher untuk memuat semula Elemen UI.

Atas ialah kandungan terperinci Bagaimana untuk mengubah suai ObservableCollection Daripada Benang Bukan Penghantar dalam WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn