当选择器聚焦时,我试图加载选择器的ItemSource。 但是第一次关注时没有加载数据。
这是代码示例
List<object> itmSrc;
Picker picker = new Picker();
itmSrc = Controls[i].ItemSource;
picker.Focused += BindItemSourceOnFocus;
public void BindItemSourceOnFocus(object sender, FocusEventArgs e)
{
var p = e.VisualElement as Picker;
p.ItemsSource = itmSrc;
}
如果可以采用其他任何方法,请与我们联系。
答案 0 :(得分:0)
您可以在异步方法或其他线程上添加项目。在视图焦点上加载数据只是将问题转移到另一个地方,它会给用户带来糟糕的体验。
例如,如果在Task.Run()
内部运行代码块,则此代码将在另一个线程上执行,并且接口不应在数据加载时挂起。
这样的事情:
public class MyPage : ContentPage
{
List<object> itmSrc;
Picker picker;
public MyPage()
{
// Your stuff goes here
itmSrc = new List<object>();
picker = new Picker();
StackLayout content = new StackLayout();
content.Crindren.Add(picker);
this.Content = content;
Task.Run(() => LoadData());
}
private void LoadData()
{
// Get your data from anywhere and put it on the itemSrc from here.
// Then...
picker.ItemsSource = itmSrc;
}
}
我希望它有所帮助。