【问题标题】:Xamarin Forms ListView stays empty after filling the sourceXamarin Forms ListView 在填充源后保持为空
【发布时间】:2020-03-10 23:21:48
【问题描述】:

我有问题。我从我的 ViewModel 创建了一个 ListView,其中 itemsource 是一个名为 unknownDeviceList 的列表。这是我的视图模型:

public class VM_AddDeviceList : BindableObject
{
    private List<UnknownDevice> _unknownDeviceList;
    public List<UnknownDevice> unknownDeviceList
    {
        get
        {
            return _unknownDeviceList;
        }
        set
        {
            if (_unknownDeviceList != value)
            {
                _unknownDeviceList = value;
                OnPropertyChanged();
            }
        }
    }

    public List<UnknownDevice> deviceList_raw;

    public VM_AddDeviceList()
    {
        deviceList_raw = new List<UnknownDevice>();
        unknownDeviceList = new List<UnknownDevice>();
        MyHandler();
    }

    private async Task LoadUnknownDeviceList()
    {
        deviceList_raw = await App.RestService.GetDevices();

        foreach (UnknownDevice device in deviceList_raw)
        {
            bool containsItem = App.knownDeviceList.Any(item => item.MAC == device.MAC);

            if (!containsItem)
            {
                unknownDeviceList.Add(device);
            }
        }
    }

    public Task MyHandler()
    {
        return LoadUnknownDeviceList();
    }
}

现在我可以看到 unknownDeviceList 被填充到 foreach 中,但在屏幕上 ListView 保持为空。我究竟做错了什么? 与 async 和 await 有什么关系?

【问题讨论】:

  • 使用ObservableCollection&lt;&gt; 而不是List&lt;&gt;

标签: c# xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

您在设置unknownDeviceList 时提高PropertyChanged 以通知视图列表已更改。无论如何,视图无法知道unknownDeviceList 中添加了项目。

解决该问题最惯用的方法是改用ObservableCollection&lt;string&gt;

private ObservableCollection<string> _unknownDevices = new ObservableCollection<string>();

public ObservableCollection<string> UnknownDevices => _unknownDevices;

请注意,我将expression body syntax for read-only properties 用于UnknownDevices,它不是一个字段。

由于ObservableCollection&lt;string&gt; 实现了INotifyCollectionChanged,可以通过绑定到UnknownDevices 来订阅该视图,因此视图被告知UnknownDevices 中的更改,并且将在添加或删除任何项目时更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多