カスタムTableViewCellを使用する必要があるiOS用のこのMvvmCrossアプリに取り組んでいます。MvxSimpleTableViewSource で SelectedCommand イベントを実装する方法を知りたいです。私は MvxStandardTableViewSource を動作させるようにしましたが、YouTube でこのソリューションを見つけました。このソリューションの問題は、Stuart が MvxStandardTableViewSource を使用していることです。もう 1 つの問題は、SelectedChangedCommand をバインドするモデルが、ソースをバインドするモデルと同じではないことです。
この問題の答えを見つけるためにしばらくの間インターネットを検索しているので、誰かが私を助けてくれることを願っています. 前もって感謝します。
これが私のコードです:
MainViewModel.cs
namespace MyApp.Core.ViewModels
{
public class MainViewModel : BaseViewModel
{
private NavigationListViewModel _navigationMenu;
public NavigationListViewModel NavigationMenu
{
get { return _navigationMenu; }
set { _navigationMenu = value; RaisePropertyChanged(() => NavigationMenu); }
}
public void Init()
{
NavigationMenu = new NavigationListViewModel();
NavigationMenu.Init();
}
}
NavigationListViewModel.cs
namespace MyApp.Core.ViewModels.NavigationViewModels
{
public class NavigationListViewModel : BaseViewModel, IPageSelectedService
{
private List<NavigationItemViewModel> _navigationList;
public List<NavigationItemViewModel> NavigationList {
get { return _navigationList; }
set { _navigationList = value; RaisePropertyChanged(() => NavigationList); }
}
public void Init() {
NavigationList = new List<NavigationItemViewModel> {
new NavigationItemViewModel { DisplayName = "Assortment", ActionLink = NavigateToCategories },
new NavigationItemViewModel { DisplayName = "Shops", ActionLink = NavigateToShops }
};
}
public ICommand NavigateToCategories
{
get { return new MvxCommand(() => ShowViewModel<CategoryListViewModel>()); }
}
public ICommand NavigateToShops
{
get { return new MvxCommand(() => ShowViewModel<StoreListViewModel>()); }
}
}
NavigationItemViewModel.cs
namespace MyApp.Core.ViewModels.NavigationViewModels
{
public class NavigationItemViewModel : MvxViewModel
{
private string _displayName;
public string DisplayName
{
get { return _displayName; }
set { _displayName = value; RaisePropertyChanged(() => DisplayName); }
}
private ICommand _actionLink;
public ICommand ActionLink {
get { return _actionLink; }
set { _actionLink = value; RaisePropertyChanged(() => ActionLink); }
}
}
}
MainView.cs
namespace MyApp.iOS.Views
{
public partial class MainView : MvxViewController
{
public new MainViewModel ViewModel {
get { return (MainViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
public MainView() : base ("MainView", null)
{
}
public override void ViewDidLoad() {
base.ViewDidLoad();
var set = this.CreateBindingSet<MainView, MainViewModel>();
var source = new MvxSimpleTableViewSource(menuTableView, MainTableCell.Key, MainTableCell.Key);
menuTableView.Source = source;
set.Bind(source).To(vm => vm.NavigationMenu.NavigationList);
set.Apply();
menuTableView.ReloadData();
}
}
}
MainTableCell
namespace MyApp.iOS.Views {
public partial class MainTableCell : MvxTableViewCell {
public static readonly UINib Nib = UINib.FromName("MainTableCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString("MainTableCell");
public MainTableCell(IntPtr handle) : base (handle) {
this.DelayBind(() => {
var set = this.CreateBindingSet<MainTableCell, NavigationItemViewModel>();
set.Bind(titleLabel).To(vm => vm.DisplayName);
set.Apply();
});
}
public static MainTableCell Create() {
return (MainTableCell)Nib.Instantiate(null, null)[0];
}
}
}