C# 列表视图项绑定

C# 列表视图项绑定,c#,android,.net,mono,xamarin,C#,Android,.net,Mono,Xamarin,我得到了一个场景,需要用音频文件名绑定android xamarin中的ListView。 它应该只显示音频名称的前5个字符。我通过拆分它来实现这一点,它工作得很好 adapter = new ArrayAdapter<string> ( this , Resource.Layout.list_item , Resource.Id.audio_names , lstSearchResult.ToArray () ); listResult.Adapter = adapte

我得到了一个场景,需要用音频文件名绑定android xamarin中的ListView。 它应该只显示音频名称的前5个字符。我通过拆分它来实现这一点,它工作得很好

adapter = new ArrayAdapter<string> ( this , Resource.Layout.list_item ,       Resource.Id.audio_names , lstSearchResult.ToArray () );
listResult.Adapter = adapter;

任何建议/替代vl都值得赞赏

最好的办法是创建自定义适配器。 首先,为一行创建自己的布局。称之为“SongListRow”(或任何其他名称)

然后为您的歌曲创建一个类:

public class Song {
    public string Name { get; set; }
    public string File { get; set; }
}
然后创建适配器:

public class SongListAdapter : BaseAdapter<Song> {
    private List<Song> _items;
    private Activity _context;

    public SongListAdapter(Activity context, List<Song> songs)
    {
        this._items = songs;
        this._context = context;
    }

    public override Song this[int position]
    {
        get { return this._items[position]; }
    }

    public override int Count
    {
        get { return this._items.Count; }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = this._items[position];
        View view = convertView;
        //If there is nothing to reuse, then create view from your row layout
        if (view == null)
            view = this._context.LayoutInflater.Inflate(Resource.Layout.SongListRow, null); 

        view.FindViewById<TextView>(Resource.Id.SongTitle).Text = item.Name; 

        return view;
    }
}
现在创建歌曲的通用列表,创建适配器并将歌曲列表传递给适配器的构造函数。然后你可以这样做:

listResult.Adapter = this._songsAdapter;
listResult.ItemClick += (s,e) => {
    var fileName = this._songsAdapter[e.Position].File;
    // Play your song
}

将发送者的DataContext设置为对象的实例,并从中获取完整数据非常感谢…节省了我的时间:)如果在列表中添加、删除某个项目,或只是更改了某个项目,则不会更新listResult(UI)。如何应对?
private SongListAdapter _songsAdapter;
listResult.Adapter = this._songsAdapter;
listResult.ItemClick += (s,e) => {
    var fileName = this._songsAdapter[e.Position].File;
    // Play your song
}