首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自ViewModel的绑定控制详细信息对于ListView在xamarin.forms中花费了很长的时间

来自ViewModel的绑定控制详细信息对于ListView在xamarin.forms中花费了很长的时间
EN

Stack Overflow用户
提问于 2019-01-22 04:10:25
回答 1查看 112关注 0票数 0

我正在开发xamarin.forms应用程序,我有一个列表视图,其中有11个堆栈布局,每个stackLayout都有不同的设计。

在这里,堆栈布局中所有控件的所有颜色和可见性都是从viewModel绑定的。

问题是,在加载应用程序时,listview正在为视图加载,但是在那里,从ViewModel绑定列表视图的设计需要花费大约10-30秒的时间。

代码语言:javascript
复制
<ListView x:Name="itemslist" ItemsSource="{Binding listViewItems}" CachingStrategy="RecycleElement" HasUnevenRows="true" SeparatorVisibility="None" HorizontalOptions="FillAndExpand" BackgroundColor="#e7ebee" ItemSelected="OnItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                    <controls:CustomViewCell/>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

我的自定义viewCell是如下结构:

代码语言:javascript
复制
<StackLayout>
   <StackLayout x:Name="Type1">
        <Frame>
              Combination of Buttons, pickers and editor
        </Frame>
     </StackLayout>
.........................................................
 <StackLayout x:Name="Type11">
        <Frame>
              Combination of Buttons, pickers and editor
        </Frame>
     </StackLayout>
</StackLayout>

这个自定义视图单元由11个堆栈组成,每个堆栈都有不同的设计。

是否有任何方法使设计快速加载到视图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 10:50:52

你是正确的。这不是最好的方法,因为在加载列表时,您实例化了许多对最终用户没有用处的可视元素。

我就是这样做的:

  1. 分隔ContentView中的每个视图
  2. 创建一个将所有集合在一起的视图,但只在必要时才对视图进行套用,这将类似于(这里不需要xaml ):

公共类ContentView1 : ContentView { public ContentView1 () {.}

代码语言:javascript
复制
protected override void OnBindingContextChanged()
{
    base.OnBindingContextChanged();
    if (BindingContext is MyViewModel vm)
    {
        _vm = vm;
        vm.PropertyChanged += VmOnPropertyChanged;
    }

如果_vm不是null },请不要忘记分离事件处理程序。

代码语言:javascript
复制
private void VmOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == nameof(MyViewModel.MyProperty))
    {
        switch (_vm.MyProperty)
        {
            case 1:
                Content = new View1();
                break;
            case 2:
                Content = new View2();
                break;
            [...]
        }
    }
}

}

这样,只有在需要时,才能将视图号"n“固定下来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54301143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档