C# 无法使用可观察集合绑定到列表视图

时间:2021-07-23 11:30:40

标签: c# wpf data-binding observable

当我尝试将可观察类型的集合绑定到 listView 时遇到问题。 我确信该集合正在正确更新,但列表视图中没有发生任何事情。

我正在检索 JSON 对象并将它们转换为 Observable 的集合。

File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 38, in inner
    response = await get_response(request)
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 233, in _get_response_async
    response = await wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 444, in __call__
    ret = await asyncio.wait_for(future, timeout=None)
  File "/usr/local/lib/python3.9/asyncio/tasks.py", line 442, in wait_for
    return await fut
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 486, in thread_handler
    return func(*args, **kwargs)
  File "/stats-backend/./api/views.py", line 71, in test
    print(db)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 256, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 262, in __len__
    self._fetch_all()
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1175, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.NotSupportedError: cross-database references are not implemented: data__golem.inf.cpu.cores
LINE 1: ...ode"."created_at" FROM "collector_node" ORDER BY ("data__gol...

}

这是 XAML 类:

public partial class MainWindow : Window
{
    public ObservableCollection<post> mproducts = new ObservableCollection<post>();

    public MainWindow()
    {

        InitializeComponent();
        DataContext = mproducts;
    }
    private static readonly HttpClient Client = new HttpClient();
    async void OnLoad(object sender, RoutedEventArgs e)
    {
        HttpResponseMessage response = await Client.GetAsync("https://jsonplaceholder.typicode.com/posts");
        response.EnsureSuccessStatusCode();
        string data = await response.Content.ReadAsStringAsync();

        mproducts = JsonConvert.DeserializeObject<ObservableCollection<post>>(data);
        MessageBox.Show(mproducts.Count.ToString());

    }
    public class post
    {
        public string UserId { get; set; }
        public string Id { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
    }

当应用加载时,它会显示在消息框编号 100 中,这意味着该集合已更新。

1 个答案:

答案 0 :(得分:1)

ListBox 的绑定应该是这样的

ItemsSource="{Binding}"

因为您绑定到存储在 DataContext 中的集合本身。同样在您的代码中,您应该在 DataContext = mproducts; 事件中执行 OnLoad after 将集合分配给 mproducts 如下:

mproducts = JsonConvert.DeserializeObject<ObservableCollection<post>>(data);
DataContext = mproducts;
相关问题