티스토리 뷰

728x90
반응형

한페이지 Multiview BindingContext 구현은 View 한개에 두개의 모델을 넣으면 된다...

<Page1.cs>

 BindingContext = new Page1_ViewModel();

<View에서>

 public class Page1_ViewModel
{

 public ObservableCollection<EduPoint_List> Bind_Edu_List { get; private set; }

  public ObservableCollection<RTDB_Notice> Notices
        {
            get { return _Notices; }
            set
            {
                _Notices = value;
                OnPropertyChanged();
            }
        }

   List<EduPoint_List> source;
    public Page1_ViewModel()
        {

 // Binding 1 -----------
               source = new List<EduPoint_List>();
                CollectionView collectionView = new CollectionView
                {
                    RemainingItemsThreshold = 5
                };
                source = Edu_Binds().Result;

                if (source is null)
                {
                    //Console.WriteLine("Notice Null");               
                }
                else
                {
                    Bind_Edu_List = new ObservableCollection<EduPoint_List>(source);
                    if (Bind_Edu_List is null)
                    {
                        Console.WriteLine("Bind_Edu_List Null");
                    }

                    selectedItem = Bind_Edu_List.Skip(0).FirstOrDefault();
                    ItemSelectionChanged();
             }

 // Binding 1 END -----------

 // Binding 2 START -----------

                _RTDBservices = new DBFirebase();
                firebaseHelper.listenForEvents(3);
                Notices = firebaseHelper._returnedEvents; 
               if (Notices != null)
                {
                    AddCommand = new Command(async () => await addNoticesAsync(RTDB_Subject, RTDB_Body));
                }
  // Binding 2 END -----------

       }

      public async Task<List<EduPoint_List>> Edu_Binds()
        {
            return await Page1.EduListBind();
        }

        ObservableCollection<object> selectedItems;
        public ObservableCollection<object> Selected_Items
        {
            get
            {
                return selectedItems;
            }
            set
            {
                if (selectedItems != value)
                {
                    selectedItems = value;
                }
            }
        }

      EduPoint_List selectedItem;

        public EduPoint_List SelectedItem
        {
            get
            {
                return selectedItem;
            }
            set
            {
                if (selectedItem != value)
                {
                    selectedItem = value;
                }
            }
        }


        public ICommand ItemSelectionChangedCommand => new Command(ItemSelectionChanged);
        public void ItemSelectionChanged()
        {
            SelectedItemMessage = $"Selection {selectedItem}: {selectedItem.Subject}";
            OnPropertyChanged("SelectedItemMessage");
            selectionCount++;
      
        }
        public string SelectedItemMessage { get; private set; }
        int selectionCount = 1;

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion

 

 

      FirebaseHelper firebaseHelper = new FirebaseHelper();
        public async Task addNoticesAsync(string _RTDB_Subject, string _RTDB_Body)
        {
            Console.WriteLine("Add__________________________");
            await _RTDBservices.AddNotices(_RTDB_Subject, _RTDB_Body);
        }
            return oc;

} // Close Page1_ViewModel

 

______________________________________

 참고: 

https://stackoverflow.com/questions/59661566/how-do-i-bind-multiple-viewmodels-to-a-single-view

 

How do I bind multiple viewmodels to a single view

I have two listviews on a single Content page therefore l would like for each listview to have its own viewmodel as itemsoruce.

stackoverflow.com

 

 

 

반응형
댓글