2017-02-01 3 views
0

Ich habe zwei UITableView in der gleichen UIViewController. tblView1 & tblView2.Bind zweite UITableView auf RowClick des ersten UITableView in der gleichen UIViewController - IOS Xamarin

Beide TableViews bringen Daten dynamisch. Jetzt ist mein Problem: Ich möchte Daten in tblView2 auf der Grundlage von SelectedRow von tblView1 laden.

Zum Beispiel, wenn ich einen Firmennamen aus tblView1 auswähle, dann muss tblView2 die Autos dieser Firma füllen.

Ich habe rowIndex meiner ersten Tabelle (tblView1), aber ich kann meine tblView2 nicht von der RowSelected-Methode von tblView1 binden. Ich brauche Hilfe bei der Bindung meines tblView2. Wie kann ich das tun?

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 
using CoreGraphics; 
using Foundation; 
using UIKit; 

namespace Tables 
{ 
    public partial class ViewController : UIViewController 
    { 
     protected ViewController(IntPtr handle) : base(handle) 
     { 
      // Note: this .ctor should not contain any initialization logic. 
     } 
     public ViewController() 
     { 
      //tblView2.Source = new CompanyModelsSource(); 

      // Note: this .ctor should not contain any initialization logic. 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      if (tblView1 != null) 
      { 
       tblView1.Source = new CarModelsSource(); 

      } 
      // Perform any additional setup after loading the view, typically from a nib. 
     } 

     public override void DidReceiveMemoryWarning() 
     { 
      base.DidReceiveMemoryWarning(); 
      // Release any cached data, images, etc that aren't in use. 
     } 
    } 

    class CompanyModelsSource : UITableViewSource 
    { 
     private List<Companies> _Companies; 
     NSString _cellID = new NSString("TableCell"); 

     public CompanyModelsSource() 
     { 
      _Companies = CompanyTableSource.AllCompany(); 
     } 

     public override nint RowsInSection(UITableView tableview, nint section) 
     { 
      // tell the TableView how many rows to create 
      return _Companies.Count; 
     } 

     public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
     { 
     //I can't access my tblView2 in this method. So where i can bind my other UITableView? 

      UILabel lblTotalFacilities = new UILabel(); 
      lblTotalFacilities.Layer.BackgroundColor = UIColor.Blue.CGColor; 
      lblTotalFacilities.Frame = new CGRect(305, 200, 1024, 400); 

      ViewController vc = new ViewController(); 
      vc.View.AddSubview(lblTotalFacilities); 
     } 

     public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      Company currentCompany = _Companies[indexPath.Row]; 

      var cell = tableView.DequeueReusableCell(_cellID) as CompanyTableCell; 
      if (cell == null) { cell = new CompanyTableCell(_cellID); } 

      cell.UpdateCellControlsWithAuditData(currentCompany.Name); 

      return cell; 
     } 
    } 

    public class CompanyTableSource 
    { 
     public CompanyTableSource() 
     { 
     } 

     public static List<Companies> AllCompany() 
     { 
      CompanyCollection CC = null; 

      string path1 = path + "Companies.xml"; 

      XmlSerializer serializer = new XmlSerializer(typeof(CompanyCollection)); 

      StreamReader reader = new StreamReader(path1); 
      CC = (CompanyCollection)serializer.Deserialize(reader); 
      reader.Close(); 

      List<Companies> comp = CC.CompanyCollection.Cast<Companies>().ToList(); 
      return comp; 
     } 
    } 

    public class CompanyTableCell : UITableViewCell 
    { 
     UILabel nameLabel; 
     public CompanyTableCell(NSString cellId) : base(UITableViewCellStyle.Default, cellId) 
     { 
      SelectionStyle = UITableViewCellSelectionStyle.Gray; 
      ContentView.BackgroundColor = UIColor.FromRGB(54, 194, 36); 

      var newFont = UIFont.SystemFontOfSize(12); 

      nameLabel = new UILabel(); 
      nameLabel.Font = newFont; 

      ContentView.AddSubviews(new UIView[] { nameLabel }); 
     } 


     public void UpdateCellControlsWithAuditData(string Name) 
     { 
      nameLabel.Text = Name; 

     } 

     public override void LayoutSubviews() 
     { 
      base.LayoutSubviews(); 
      nameLabel.Frame = new CGRect(10, 0, 350, 33); 

     } 
    } 
} 

TablesViewController

+0

Erstellen Sie in der CompanyTableSource-Klasse ein öffentliches Ereignis, und abonnieren Sie es über den ViewController. In der RowSelected-Methode dieser DataSource wird dann das Ereignis ausgelöst. Im ViewController haben Sie einen Event-Handler, der benachrichtigt wird. Dort können Sie die Informationen, die Sie für die zweite tableView benötigen, basierend auf RowSelected der ersten Tabellenansicht abrufen. (habe VS hier nicht um dir Code zu zeigen, hoffe das gibt dir zumindest die Idee) – apineda

+0

Ich kann dir meinen TeamViewer zur Verfügung stellen wenn du mir bitte helfen kannst. – Khaksar

+0

@apineda oder wenn Sie mir einen Link zu einem Beispiel geben können?/ – Khaksar

Antwort

1

Hoffnung, das hilft. Alles zur Vereinfachung in einer Datei erstellt.

+0

Das hat bei mir anders funktioniert. Ich habe versucht, das 'UITableView' im Event zu binden, aber das hat nicht funktioniert, dann habe ich' UITableView' dynamisch im Event erstellt und ihm dann die Quelle zur Verfügung gestellt und es hat funktioniert. :-) Danke, Können Sie bitte eine andere Frage von mir über Xamarin? http://stackoverflow.com/q/41833049/4728323 – Khaksar

Verwandte Themen