使用MVVMCross在iOS上实现搜索

Sin*_*sag 1 uisearchbar ios mvvmcross xamarin

我只是想知道是否有任何例子可以做到这一点?

所以我想要做的是用MVVCross实现一个搜索,现在不知道如何开始.任何关于正确方向的提示都会受到极大的关注.

值得一提的是,我的想法有点像......

我有一个视图,我有搜索栏.但我不是在该视图中搜索数据.所以在搜索时,我想显示一个新的表视图并搜索它.

我为表和控制器创建了一个单元格来显示它(只是usuall list视图的东西),但我现在仍然坚持使用搜索栏实现.

public partial class HomeView : MvxViewController
{
    public HomeView () : base ("HomeView", null)
    {
    }

    public override void DidReceiveMemoryWarning ()
    {
        // Releases the view if it doesn't have a superview.
        base.DidReceiveMemoryWarning ();

        // Release any cached data, images, etc that aren't in use.
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        if (RespondsToSelector(new MonoTouch.ObjCRuntime.Selector("edgesForExtendedLayout")))
            EdgesForExtendedLayout = UIRectEdge.None;
        RecommendedCollectionView.RegisterNibForCell(RecommededStationCollectionCell.Nib, RecommededStationCollectionCell.Key);
        var source = new MvxCollectionViewSource(RecommendedCollectionView, RecommededStationCollectionCell.Key);
        RecommendedCollectionView.Source = source;

        var set = this.CreateBindingSet<HomeView, HomeViewModel>();
        set.Bind(source).To(vm => vm.Genres);
        set.Apply();
        RecommendedCollectionView.ReloadData();
        var gesture = new UITapGestureRecognizer (() => {

        });

        View.AddGestureRecognizer (gesture);
    }
}
Run Code Online (Sandbox Code Playgroud)

并列表视图:

public class SearchView : UITableViewController
{
    public SearchView () : base ("SearchView", null)
    {
    }

    public override void DidReceiveMemoryWarning ()
    {
        // Releases the view if it doesn't have a superview.
        base.DidReceiveMemoryWarning ();

        // Release any cached data, images, etc that aren't in use.
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();


        var source = new MvxSimpleTableViewSource (TableView, SearchTableCell.Key, SearchTableCell.Key);
        TableView.Source = source;
        TableView.RowHeight = 50;

        var set = this.CreateBindingSet<SearchView, SearchViewModel> ();
        set.Bind (source).To (vm => vm.Genres);
        set.Apply ();
        TableView.ReloadData ();
        // Perform any additional setup after loading the view, typically from a nib.
    }
}
Run Code Online (Sandbox Code Playgroud)

总而言之,我想要的是当用户在主视图中的搜索栏中输入内容时,显示searchView列表并搜索内部数据.

谢谢.

Sin*_*sag 8

多谢你们.很抱歉我的视力很晚,所有这些答案都让我更好地了解MVVMCross.所以最后,我最终得到了这个解决方案.如果对这种方法有一些看法,如果有人能指出的话,我会很高兴.

所以在视图模型中,我有一个字符串属性,它绑定到searh文本.每当有文本更改时,我也会过滤列表.

所以视图模型看起来像这样:

    private string _searchTerm;
    public string SearchTerm 
    {
        get { return _searchTerm; }
        set { 
            _searchTerm = value; 
            if (String.IsNullOrEmpty(_searchTerm)) {
                _genres = new List<Genre> ();
            } else {
                _genres = allGenres.Where (g => g.Name.ToLower ().Contains (_searchTerm.ToLower ())).ToList ();
            }
            RaisePropertyChanged (() => SearchTerm);
            RaisePropertyChanged (() => Genres);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在视图中它只是绑定它:

set.Bind (SearchBar).For (x=>x.Text).To (vm => vm.SearchTerm);
Run Code Online (Sandbox Code Playgroud)

当然,列表绑定到表源.这就是它的全部.