Advertisement
MIkeKaye

NewPage1.xaml.cs 29Jan

Jan 29th, 2025
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.21 KB | None | 0 0
  1. using System.Collections.ObjectModel;
  2. using System.ComponentModel;
  3. using System.Diagnostics;
  4. using System.Runtime.CompilerServices;
  5. using System.Windows.Input;
  6. using CommunityToolkit.Mvvm.ComponentModel;
  7. using Microsoft.Maui.Platform;
  8. namespace MM2.Views;
  9. public partial class NewPage1 : ContentPage
  10. {
  11.     public partial class Item : ObservableObject
  12.     {
  13.         [ObservableProperty] public string acct;
  14.         [ObservableProperty] public decimal amount;
  15.  
  16.         public int tag;
  17.  
  18.         public event PropertyChangedEventHandler PropertyChanged;
  19.         protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
  20.         {
  21.             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  22.         }
  23.     }
  24.     public partial class MyViewModel : ObservableObject
  25.     {
  26.         Item _SelectedItem;
  27.         public Item SelectedItem
  28.         {
  29.             get { return _SelectedItem; }
  30.             set
  31.             {
  32.                 if (_SelectedItem == value) return;
  33.                 _SelectedItem = value;
  34.                 OnPropertyChanged();
  35.             } // OnPropertyChanged needed/okay/bad?
  36.         }
  37.         private ObservableCollection<Item> _ItemsOC;
  38.         public ObservableCollection<Item> ItemsOC
  39.         {
  40.             get { return _ItemsOC; }
  41.             set
  42.             {
  43.                 if (_ItemsOC == value) return;
  44.                 _ItemsOC = value;
  45.                 OnPropertyChanged();
  46.             }
  47.         }
  48.         public event PropertyChangedEventHandler PropertyChanged;
  49.         protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
  50.         {
  51.             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  52.         }
  53.     }
  54.  
  55.     public ObservableCollection<Item> ItemsOC { get;  set; }
  56.     Item OneItem { get; set; }
  57.     Item OneMini { get; set; }
  58.     Item ItemMaybe { get; set; }
  59.    
  60.     string Q;
  61.     MyTable tbl;
  62.     int MiniIndex = 0;
  63.     ViewModels.MyViewModelx vmx;
  64.     MyViewModel vm;
  65.  
  66.     public NewPage1()
  67.     {
  68.         InitializeComponent();
  69.         vmx = new ViewModels.MyViewModelx();
  70.         BindingContext = vmx;
  71.         vmx.theDate = DateTime.Today;
  72.         vmx.anInt = 1234;
  73.  
  74.         vm = new MyViewModel();
  75.         BindingContext = vm;
  76.         Setup();
  77.    }
  78.    void Setup()
  79.     {
  80.         int hjkl = vmx.anInt+5432; // for debug only
  81.         Q = "SELECT AcctName, AcctBalance FROM Assets;";
  82.         tbl = new(Q);
  83.         int NumRows = tbl.numRows; //3
  84.         int NumCols = tbl.numCols; //2
  85.  
  86.         ItemsOC = new();
  87.         BindingContext = this;
  88.         for (int i = 0; i < NumRows; i++)
  89.         {
  90.             OneItem = new();
  91.             string[] aRow = tbl.GetRow(i);
  92.             OneItem.acct = aRow[0];
  93.             OneItem.amount = Convert.ToDecimal(aRow[1]);
  94.             OneItem.tag = i;
  95.             ItemsOC.Add(OneItem);
  96.         }
  97.         MiniIndex = -1;      // ** gray out
  98.         SetButtonsVisible(); // ** buttons
  99.     }
  100.     private void MiniView_SelectionChanged(object s, EventArgs e)
  101.     {
  102.         if (MiniView.SelectedItem is null) return;
  103.         OneMini = (Item)MiniView.SelectedItem;
  104.  
  105.         int tag = OneMini.tag;
  106.         int index = ItemsOC.IndexOf(ItemsOC.Where
  107.             (X => X.tag == tag).FirstOrDefault());
  108.         if (index == -1)
  109.         {
  110.             return; // trap this line for debug
  111.         }
  112.         // index is valid
  113.         MiniIndex = index;
  114.         SetButtonsVisible(); // up/down/remove
  115.     } // END MiniView_SelectionChanged(object s, EventArgs e)
  116.     void click(object sender, EventArgs e)
  117.     {
  118.         int c = ItemsOC.Count;
  119.         if (c < 1) return;
  120.         // swap bottom to top
  121.         ItemsOC.Move(c - 1, 0);
  122.         // reverse the above
  123.         ItemsOC.Move(0, c - 1);
  124.     }
  125.     void SetButtonsVisible()
  126.     {
  127.      //   Color LiteGrey = Color.FromRgb(64,64,64);
  128.      //   Color std = Color.FromRgb(0,0,128);
  129.  
  130.         bool up = true;
  131.         bool down = true;
  132.         bool top = true;
  133.         bool del = true;
  134.         int max = ItemsOC.Count - 1;
  135.         if (max <= 0 || MiniIndex < 0)
  136.         {
  137.             up = false;
  138.             down = false;
  139.             top = false;
  140.             del = false;
  141.         }
  142.         if (MiniIndex == 0) up = top = false;
  143.         if (MiniIndex == max) down = false;
  144.         bUp.IsEnabled = up;
  145.         bDwn.IsEnabled = down;
  146.         bDel.IsEnabled = del;
  147.         bTop.IsEnabled = top;
  148.     }
  149.     void clickDown(object s, EventArgs e)
  150.     {
  151.         ItemsOC.Move(MiniIndex, MiniIndex+1);
  152.         MiniIndex++;
  153.         MiniView.SelectedItem = ItemsOC[MiniIndex];
  154.         SetButtonsVisible();
  155.     }
  156.     void clickToTop(object s, EventArgs e)
  157.     {
  158.         ItemsOC.Move(MiniIndex, 0);
  159.         MiniIndex = 0;
  160.         MiniView.SelectedItem = ItemsOC[MiniIndex];
  161.         SetButtonsVisible();
  162.     }
  163.     void clickDelete(object s, EventArgs e)
  164.     {
  165.         ItemsOC.RemoveAt(MiniIndex);
  166.         MiniIndex = -1;
  167.         SetButtonsVisible();
  168.     }
  169.     void clickUp(object s, EventArgs e)
  170.     {
  171.         ItemsOC.Move(MiniIndex, MiniIndex-1);
  172.         MiniIndex--;
  173.         MiniView.SelectedItem = ItemsOC[MiniIndex];
  174.         SetButtonsVisible();
  175.     }
  176.  
  177. } // END partial class NewPage1
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement