【问题标题】:Androids' BaseAdapter equivalent in Windows Store appsWindows Store 应用程序中的 Android BaseAdapter 等效项
【发布时间】:2014-03-10 16:49:24
【问题描述】:

我有大量 Integer 项,我想在 ListView 中以格式显示它们。通常在 Android 上我会扩展 BaseAdapter(这是动态视图/控件创建的示例):

public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView!=null){
        //inflate convertView if it doesn't exist 
    }
    MyView v = (MyView)convertView;
    v.setId(position);
    v.setNumber(myIntegerArray[position]);
    return v;
}

我想知道如何在 C# 中为我的 Windows 应用商店应用程序执行此操作。我找不到有关此主题的任何有意义的信息。

我不想每次都创建 List(或其他 ItemsSource 对象),因为它会占用太多内存并且速度很慢(我必须刷新数组值)。

【问题讨论】:

    标签: c# android windows listview equivalent


    【解决方案1】:

    基于 XAML 的 UI 技术具有称为 UI Virtualization 的功能,可在处理基于项目的 UI (ItemsControls) 中呈现的大量数据集合时减少内存消耗和处理时间。

    为了实现这一点,同时保持在基础数据集合中添加/删除/更改项目时更新 UI 的能力,您需要将您的 UI 设置为 DataBindObservableCollection<T>

    <ListBox ItemsSource="{Binding}"/>
    

    后面的代码:

    var numbers = Enumerable.Range(0,100);
    DataContext = new ObservableCollection<int>(numbers);
    

    请记住,声明性,基于 XAML 的 UI 技术中基于 DataBinding 的方法与其他框架中的过程方法确实不同。在 XAML 中,您从不需要在过程代码中创建 UI 元素,您在 XAML 中定义它们,然后将 UI 绑定到相关的数据项集合和 UI 框架其余的会处理。

    【讨论】:

    • 好吧,我创建了 ObservableCollection() 其中 MyCustomType 实现了必填字段。现在我希望 ListView 在 ObservableCollection 发生更改时自动更新。我该怎么做(在 Android 中称为 notifyDataSetChanged() )。
    • @rs411 你的MyCustomType 需要Implement INotifyPropertyChanged
    • @rs411,顺便说一句,你应该停止考虑 Android,不幸的是,整个 Android 框架是基于一种有限的、臃肿的、低效的、缺乏表达力的、过于冗长的语言“java”,它受到很多这种语言的限制。基于 XAML 的技术有完全不同的方法。
    • 是的,我注意到 C# 更好,而不是写 new Runnable(){@Override public void run(){/*my code*/}} 我只需要写 delegate {/*my code*/}。而且我并没有考虑放弃 Android(我真的很喜欢这个平台),但是因为我现在拥有 Windows 8.1 平板电脑,所以我决定为它创建一些软件。 :D
    • @rs411 delegate {/*my code*/} 可以替换为 () =&gt; /*mycode*/x =&gt; x.Method() 其中 x 是包含名为 Method() 的方法的类的实例,具体取决于委托的参数,它C# 编译器会推断而不是强迫您编写一堆样板文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多