gpt4 book ai didi

c# - 使用 MVVM Xamarin Forms 使用数据填充选择器

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:45 25 4
gpt4 key购买 nike

我正在尝试让一个选择器填充数据。似乎在任何地方都没有直接的答案。我已经尝试了很多事情,但确实有效的一件事是:

Xaml:

<Picker Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="4"
Title="Driver Name"
ItemsSource="{Binding Drivers}"
SelectedItem="{Binding driverID}"

在 View 模型中:

List<string> Drivers = new List<string> { "Steve","Dave" };

这工作正常,但它只是一个虚拟功能,因为将来这些名称将从某种服务中获取。因此,为了尝试复制它,我尝试将这个列表分离到一个模拟服务中,然后将列表返回到 View 模型并使其以这种方式工作。

但是即使在调试时我可以看到列表不是空白,这仍然不会向前端返回任何内容。然后我尝试创建一个驱动程序类并返回其中具有名称的类的实例并在 Xaml 中访问它。这没有用,我什至尝试了使用 IList 的变体,这也没有用。

我不确定为什么这不起作用,因为列表只是被分成了本质上不同的类。例如,这就是我现在正在尝试的:

Xaml:

 <Picker Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="4"
Title="Driver Name"
ItemsSource="{Binding Drivers}"
SelectedItem="{Binding driverID}"
/>

查看模型:

这是绑定(bind)到选择器

public List<string> Drivers;

然后从构造函数中调用这个方法:

 public async Task FindDriverNames()
{
Drivers = await GetDriverNames();
}

在模型中:

 public async Task<List<string>> GetDriverNames()
{
await Sleep();

List<string> _drivers = new List<string> { "Steve"};

return _drivers;

}

这不起作用,但是当通过调试运行时,它显示驱动程序已填充。我浪费了很多时间来完成这项工作,有人有见解吗?

最佳答案

您需要一个 ObservableCollection,可能还需要一个 INotifyPropertyChanged 接口(interface)实现来通知 View 任何更改。

public class YourViewModel: INotifyPropertyChanged
{
public YourViewModel()
{
Drivers = new ObservableCollection<string>();
}

private ObservableCollection<string> _drivers;
public ObservableCollection<string> Drivers
{
get { return _drivers; }
set
{
if (Equals(value, _drivers)) return;
_drivers= value;
OnPropertyChanged(nameof(Drivers));
}
}

protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

通过实现 INotifyPropertyChanged 接口(interface),您将允许在整个列表发生变化时更新 View 。如果一个项目被添加到集合中,可观察集合将通知 UI。

正如 Roman 所指出的,在这种特定情况下,您还可以使用可观察集合来更新 ui

public async Task FindDriverNames()
{
Drivers.Clear();
Drivers.AddRange(await GetDriverNames());
}

对于其他 bound 属性,您仍然需要 OnPropertyChanged 事件。

参见 ObservableCollection<T>INotifyPropertyChanged

关于c# - 使用 MVVM Xamarin Forms 使用数据填充选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com