Mvvm 使用tableview作为可搜索的输入

Mvvm 使用tableview作为可搜索的输入,mvvm,xamarin.ios,Mvvm,Xamarin.ios,我有一个可搜索的tableview。在这一点上,我可以填充它,并在搜索时转到detailview。知道我想将其转换为用作输入吗?但是怎么做呢? 我有一个带有输入的视图,从技术上讲,我有一个返回值的tableview,只是方式不正确 tableviewmodel: public class CMCTableViewModel : MvxViewModel { protected readonly ICoinMarketCapService _coinMarketCap

我有一个可搜索的tableview。在这一点上,我可以填充它,并在搜索时转到detailview。知道我想将其转换为用作输入吗?但是怎么做呢? 我有一个带有输入的视图,从技术上讲,我有一个返回值的tableview,只是方式不正确

tableviewmodel:

   public class CMCTableViewModel : MvxViewModel
    {
        protected readonly ICoinMarketCapService _coinMarketCapService;
        public CMCTableViewModel(ICoinMarketCapService coinMarketCapService)
        {
            _coinMarketCapService = coinMarketCapService;
            LoadData();
        }
        public MvxCommand<CoinMarketCapModel> NavigateToDetailCommand
        {
            get
            {
                return new MvxCommand<CoinMarketCapModel>(
                    SelectedCoin =>
                    {
                        ShowViewModel<CoinViewModel>(new { coinName = SelectedCoin.Id });
                    }
                  );
            }
        }

        private List<CoinMarketCapModel> _coinMarketCapModelList;
        private CoinMarketGlobData _CoinMarketGlobDataList;
        public List<CoinMarketCapModel> CoinMarketCapModelList
        {
            get
            {

                return _coinMarketCapModelList;
            }
            set
            {
                _coinMarketCapModelList = value;
                RaisePropertyChanged(() => CoinMarketCapModelList);
            }
        }
        public CoinMarketGlobData CoinMarketGlobDatas
        {
            get
            {
                return _CoinMarketGlobDataList;
            }
            set
            {
                _CoinMarketGlobDataList = value;
                RaisePropertyChanged(() => CoinMarketGlobDatas);
            }
        }

        public async void LoadData()
        {

            //CoinMarketCapModelList = await _coinMarketCapService.GetCoins("20");


            //CoinMarketGlobDatas = await _coinMarketCapService.GetGlobalData();
            CoinMarketCapModelList = await _coinMarketCapService.GetCoins();

            FilteredList = CoinMarketCapModelList;
        }

        private List<CoinMarketCapModel> _FilteredList;
        public List<CoinMarketCapModel> FilteredList
        {
            get
            {
                return _FilteredList;
            }
            set
            {
                _FilteredList = value;
                RaisePropertyChanged(() => FilteredList);
            }
        }

        public void SearchByText(string text)
        {
            if (string.IsNullOrWhiteSpace(text))
                FilteredList = CoinMarketCapModelList;
            else
            {
                FilteredList = CoinMarketCapModelList;
                FilteredList = FilteredList.Where(m => m.Name.ToLowerInvariant().Contains(text.ToLowerInvariant())).ToList();
            }
        }

    /// <summary>
    /// Gets or sets the subtitle for the base model
    /// </summary>
    }
   public MvxCommand<CoinMarketCapModel> NavigateToDetailCommand
    {
        get
        {
            return new MvxCommand<CoinMarketCapModel>(
                SelectedCoin =>
                {
                    addUserCoinHelperModel.coinID = SelectedCoin.Id;
                    addUserCoinHelperModel.name = SelectedCoin.Name;
                    ShowViewModel<AddUserCoinViewModel>();
                    //ShowViewModel<CoinViewModel>(new { coinName = SelectedCoin.Id });
                }
              );
        }
    }
公共类CMCTableViewModel:MvxViewModel
{
受保护的只读IComMarketCapService\u coinMarketCapService;
公共CMCTableViewModel(IComMarketCapService coinMarketCapService)
{
_coinMarketCapService=coinMarketCapService;
LoadData();
}
公共MvxCommand NavigateToDetail命令
{
得到
{
返回新的MvxCommand(
SelectedCoin=>
{
ShowViewModel(新的{coinName=SelectedCoin.Id});
}
);
}
}
私有列表coinMarketCapModelList;
私有CoinMarketGlobData_CoinMarketGlobDataList;
公共列表CoinMarketCapModelList
{
得到
{
return\u coinmarketcapmodelist;
}
设置
{
_coinMarketCapModelList=值;
RaisePropertyChanged(()=>CoinMarketCapModelList);
}
}
公共CoinMarketGlobData CoinMarketGlobDatas
{
得到
{
return\u CoinMarketGlobDataList;
}
设置
{
_CoinMarketGlobDataList=值;
RaisePropertyChanged(()=>CoinMarketGlobDatas);
}
}
公共异步void LoadData()
{
//CoinMarketCapModelList=wait_coinMarketCapService.GetCoins(“20”);
//CoinMarketGlobDatas=await_coinMarketCapService.GetGlobalData();
CoinMarketCapModelList=wait_coinMarketCapService.GetCoins();
FilteredList=CoinMarketCapModelList;
}
私人名单(FilteredList);;
公共列表过滤器列表
{
得到
{
返回过滤器列表;
}
设置
{
_FilteredList=值;
RaisePropertyChanged(()=>FilteredList);
}
}
公共void SearchByText(字符串文本)
{
if(string.IsNullOrWhiteSpace(text))
FilteredList=CoinMarketCapModelList;
其他的
{
FilteredList=CoinMarketCapModelList;
FilteredList=FilteredList.Where(m=>m.Name.ToLowerInvariant().Contains(text.ToLowerInvariant()).ToList();
}
}
/// 
///获取或设置基本模型的字幕
/// 
}
视图:

[MvxFromStoryboard(StoryboardName=“Main”)]
公共部分类CMCTableView:MvxTableViewController
{
bool useRefreshControl=false;
//私有UIRefreshControl刷新控制;
私有MvxUIRefreshControl刷新控制;
私有void刷新表(对象发送方、事件参数e)
{
EndRefreshing();
TableView.ReloadData();
}
公共CMCTableView(IntPtr句柄):基本(句柄)
{
}
UISearchBar_搜索栏;
CMCTableViewSource _CMCTableViewSource;
公共覆盖无效ViewDidLoad()
{
refreshControl=新的MvxUIRefreshControl();
refreshControl.ValueChanged+=refreshTable;
TableView.AddSubview(刷新控件);
_cmcTableViewSource=新的cmcTableViewSource(this.TableView);
base.ViewDidLoad();
this.TableView.Source=\u cmcTableViewSource;
this.TableView.ReloadData();
//开始初始化搜索栏
var searchController=new UISearchController(searchResultsController:null);
searchController.SearchBar.SizeToFit();
searchController.SearchBar.SearchBarStyle=UISearchBarStyle.Minimal;
searchController.SearchBar.Placeholder=“选择货币”;
searchController.DimsBackgroundDuringPresentation=false;
NavigationItem.HideseArchBarWhenScrolling=false;
NavigationItem.SearchController=SearchController;
_searchBar=searchController.searchBar;
_searchBar.SearchButtonClicked+=searchBar\u SearchButtonClicked;
_searchBar.TextChanged+=SearchBarOnTextChanged;
_searchBar.CancelButtonClicked+=SearchBarOnCancelButtonClicked;
//结束初始化搜索栏
MvxFluentBindingDescriptionSet=新的MvxFluentBindingDescriptionSet(此);
set.Bind(_cmcTableViewSource).To(vm=>vm.FilteredList);
set.Bind(_cmcTableViewSource)
.For(src=>src.SelectionChangedCommand)
.To(vm=>vm.NavigateToDetailCommand);
set.Apply();
}
private void SearchBarOnCancelButtonClicked(对象发送方,EventArgs EventArgs)
{
((CMCTableViewModel)ViewModel).SearchByText(string.Empty);
BeginInvokeMainThread(()=>_searchBar.ResignFirstResponder());
}
//公共覆盖无效视图将出现(布尔动画)
//{
//基本视图将显示(动画);
//NavigationController.NavigationBarHidden=false;
//}
private void SearchBarOnTextChanged(对象发送方,UISearchBarTextChangedEventArgs e)
{
if(string.IsNullOrWhiteSpace(_searchBar.Text))
{
((CMCTableViewModel)ViewModel).SearchByText(string.Empty);
BeginInvokeMainThread(()=>_searchBar.ResignFirstResponder());
}
其他的
{
((CMCTableViewModel)ViewModel).SearchByText(_searchBar.Text);
}
}
private void SearchBar\u SearchButtonClicked(对象发送者,事件参数e)
{
((CMCTableViewModel)ViewModel).SearchByText(_searchBar.Text);
BeginInvokeMainThread(()=>_searchBar.ResignFirstResponder());
}
}
public class addUserCoinHelperModel
{
    public static string coinID { get; set; }
    public static string name { get; set; }
    public static string Amount { get; set; }
}
   public MvxCommand<CoinMarketCapModel> NavigateToDetailCommand
    {
        get
        {
            return new MvxCommand<CoinMarketCapModel>(
                SelectedCoin =>
                {
                    addUserCoinHelperModel.coinID = SelectedCoin.Id;
                    addUserCoinHelperModel.name = SelectedCoin.Name;
                    ShowViewModel<AddUserCoinViewModel>();
                    //ShowViewModel<CoinViewModel>(new { coinName = SelectedCoin.Id });
                }
              );
        }
    }
if (addUserCoinHelperModel.coinID != null){
            btnPickCoin.SetTitle(addUserCoinHelperModel.name, UIControlState.Normal);
        }