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