2016-04-19 12 views
0

を対応する変更私は次のことを達成したい:項目のチェックボックスのいずれかに該当する場合MyViewModelIsDeleteBtnShow財産の更新チェックボックスとのListItem

機能が削除アイコンを表示することです。しかし、ListViewModelでチェックボックスのプロパティにアクセスできるので、このアップデートをListViewModelからMyViewModelに渡す必要があります。

しかし、ListItemViewModelではnull例外が発生しています。しかし、ListItemViewModelというコンストラクタを呼び出すと、parentはnullではありません。私は何が間違っているのだろうか?

MyViewModel.cs

public class MyViewModel:MvxViewModel 
{ 

    private ObservableCollection<ListItemViewModel> _myListViews; 

    public ObservableCollection<ListItemViewModel> MyListViews 
    { 
     get { return _myListViews; } 
     set 
     { 
      _myListViews= value; 
      RaisePropertyChanged(() => MyListViews); 
     } 
    } 

    private bool _isDeleteBtnShow = false; 
    public bool IsDeleteBtnShow 
    { 
     get { 
      return _isDeleteBtnShow; 
     } 
     set { 
      _isDeleteBtnShow = value; 
      RaisePropertyChanged(() => IsDeleteBtnShow); 
     } 
    } 

    public void Init(string myId) 
    { 
     List<ListItemViewModel> allListItems = new List<ListItemViewModel>(); 
     allListItems = _myService.GetAllItems(myId); 

     foreach (var myTest in allListItems) 
     { 
      _myListViews.Add(ListItemViewModel.CreateViewModel(myTest)); 
     } 
     ListItemViewModel obj = new ListItemViewModel(this); 

     } 
    } 

ListItemViewModel.cs

public class ListItemViewModel 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
    private bool _isChecked; 
    public DateTime Date { get; set; } 

    readonly MyViewModel _parent; 

    public ListItemViewModel() 
    { 
     // parameterless constructor 
    } 

    public ListItemViewModel(MyViewModel parent) 
    { 
     // _parent is not null here 
     _parent = parent; 
    } 

    public static ListItemViewModel CreateViewModel(Test entity) 
    { 
     if (entity == null) 
     { 
      return null; 
     } 
     return new ListItemViewModel 
     { 
      Date = entity.Date, 
      IsSelected = entity.IsSelected, 
     }; 
    } 

    public ICommand CheckBoxSelectionCommand 
    { 
     get 
     { 
      return new MvxCommand(() => 
      { 
       var isChecked = IsSelected; 
       // the following _parent is null 
       _parent.IsDeleteBtnShow = true; 
      }); 
     } 
    } 

    private bool _isSelected; 

    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      RaisePropertyChanged(() => IsSelected); 
     } 
    } 

    public bool IsChecked 
    { 
     get { return _isChecked; } 
     set 
     { 
      _isChecked = value; 
     } 
    } 
} 
+0

_onceのユーザーがそれを変更し、私はupdate_したい - DOをViewModelが使用しているフレームワークを介して、ユーザーから戻ってきたときを意味しますか?そして、それは必要なコンストラクタ、またはデフォルトのコンストラクタを呼び出すことですか? – stuartd

+0

'MyViewModel'の' IsDeleteBtnShow'プロパティは、アイテムのチェックボックスのいずれかがtrueまたはfalseであれば削除アイコンを表示または非表示にします。しかし、 'ListViewModel'でチェックボックスのプロパティにアクセスできるので、この更新を' ListViewModel'から 'MyViewModel'に渡す必要があります。 – hotspring

答えて

2

ビューモデルを作成するためにCreateViewModelを呼び出すときにListItemViewModelのパラメータなしのコンストラクタを使用しますので、あなたは例外を取得しています。

 List<ListItemViewModel> allListItems = new List<ListItemViewModel>(); 
    allListItems = _myService.GetAllItems(myId); 

    foreach (var myTest in allListItems) 
    { 
      _myListViews.Add(ListItemViewModel.CreateViewModel(this, myTest)); 
    } 

ListItemViewModelで:あなたがそれにMyViewModelパラメータを追加し、ListItemViewModelを作成するときにビューモデルを渡す必要が

public static ListItemViewModel CreateViewModel(MyViewModel parent, Test entity) 
    { 
     if (entity == null) 
     { 
      return null; 
     } 
     return new ListItemViewModel(parent) 
     { 
      Date = entity.Date, 
      IsSelected = entity.IsSelected, 
     }; 
    } 
+0

'CreateViewModel'は引数を1つだけ取ります。 – hotspring

+0

@hotspring:コードを更新しました。確認できますか? – Giorgi

+0

私に5分を教えてください、私は今、XAPにソリューションを再構築し、展開しています。 – hotspring

関連する問題