2014-10-14 6 views
6

Sto cercando di aggiungere alcuni elementi a un Listview che ho aggiunto usando il markup Xamarin.Forms in un file xaml. È possibile accedere al pulsante agganciando l'evento click.Ma poiché la listview è vuota ho bisogno dell'evento come ondraw come in winforms, così posso collegarmi quando viene disegnato.Xamarin.Forms che accede ai controlli scritti nel markup dal codice

enter image description here

Nel file XAML che ho:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="ButtonXaml.ButtonXamlPage"> 
      <StackLayout> 
    <Button Text="Tap for click count!" 
    BorderWidth="10" 
    TextColor="Red" 
    HorizontalOptions="Center" 
      Clicked="OnButtonClicked" /> 
      <ListView 
      HorizontalOptions="Center" 

      /> 

    </StackLayout> 
</ContentPage> 

Negli cs depositare ho

using System; 
using Xamarin.Forms; 

namespace ButtonXaml 
{ 
    public partial class ButtonXamlPage 
    { 
     int count = 0; 

     public ButtonXamlPage() 
     { 
      InitializeComponent(); 
     } 

     public void OnButtonClicked(object sender, EventArgs args) 
     { 
      ((Button)sender).Text = "You clicked me"; 
     } 
    } 
} 

Quindi devo collegare ad eventi in Listview o posso fare qualcosa come Resource.getElementbyID come facciamo in Android

+0

Perché stai cercando di collegare in quando è disegnato * *? Normalmente si popolerebbe la vista quando il modulo è * caricato * o qualcosa di simile. C'è qualche ragione per cui non stai usando un'associazione con un modello di visualizzazione qui? Questo sarebbe l'approccio più convenzionale: abbracciare MVVM :) –

+0

@JonSkeet Motivo? Non so come farlo :) Puoi fornirmi un link ad un esempio o qualcosa del genere, sono abbastanza nuovo per xamarin.forms.In android creiamo un customadaptor e lo assegno alla listview che ottengo dalla risorsa usando Resource .getElementbyID, in xamarin.forms come fare questo? – techno

+1

Piuttosto che cercare di scrivere il codice Xamarin.Forms come se fosse un codice Android, vorrei * fortemente * incoraggiarti a leggere il modo in cui Xamarin.Forms funziona e le sue espressioni idiomatiche. Finirai con * molto * codice più bello in questo modo. http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/data_bindings_to_mvvm/ introduce MVVM in Xamarin.Forms, e c'è un sacco di altra documentazione disponibile. (Credo che si possa semplicemente fornire un attributo 'Nome' nello XAML e si otterrà una variabile nel code-behind, ma l'utilizzo di MVVM sarebbe molto più pulito e più verificabile.) –

risposta

17

Per accedere a moduli di controllo nel code-behind, è necessario assegnare un nome, utilizzando l'attributo

x:Name in XAML:

<ListView HorizontalOptions="Center" x:Name="MyList" /> 

in codice:

MyList.ItemsSource = myData; 
+0

Grazie. Funziona, ma l'auto completamento non lo riconosce. – techno

+0

I pls suggeriscono se voglio accedere se dalla classe in piattaforma Progetto specifico ereditato da PageRenderer usando ExportRenderer. –

2

Nel mio caso il problema era la mancanza di linea XamlCompilation(XamlCompilationOptions.Compile)] nel file di .xaml.cs.

Esempio:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class MainPage : ContentPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     BindingContext = new MainPageViewModel(); 
    } 
    ... 
}