Xamarin表单:在焦点上添加ItemSource

时间:2018-05-14 14:06:18

标签: xamarin xamarin.forms

当选择器聚焦时,我试图加载选择器的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;
}

如果可以采用其他任何方法,请与我们联系。

1 个答案:

答案 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;
    }
}

我希望它有所帮助。

相关问题