2014-10-14 5 views
6

Im пытается добавить некоторые элементы в список, который я добавил с помощью разметки Xamarin.Forms в файле xaml. Доступ к кнопке можно получить, подключив ее с помощью события click. Но так как listview пуст, мне нужно событие вроде ondraw, как в winforms, так что я могу подключиться к нему, когда он нарисован.Xamarin.Forms, доступ к элементам управления, написанным разметкой из кода

enter image description here

В файле XAML у меня есть:

<?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> 

В .cs файл у меня есть

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"; 
     } 
    } 
} 

Так я должен подключить к событиям в Listview или я могу сделать что-то как Resource.getElementbyID, как в андроиде

+0

Почему вы пытаетесь вклиниться, когда он * обращается *? Обычно вы заполняете представление, когда форма * загружена * или что-то подобное. Есть ли причина, по которой вы не используете привязку к модели представления здесь? Это будет более традиционный подход - охватить MVVM :) –

+0

@JonSkeet Reason? Я не знаю, как это сделать :) Можете ли вы предоставить мне ссылку на пример или что-то подобное, im довольно новое для xamarin.forms.In android мы создаем customadaptor и назначаем его списку, который я получаю из ресурса с помощью Resource .getElementbyID, в xamarin.forms, как это сделать? – techno

+1

Вместо того, чтобы пытаться написать код Xamarin.Forms, как если бы это был код Android, я бы * сильно * попросил вас прочитать о том, как работает Xamarin.Forms и его идиомы. В итоге вы получите * намного более хороший код. http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/data_bindings_to_mvvm/ представляет MVVM в Xamarin.Forms, и есть много другой доступной документации. (Я считаю, что вы можете просто предоставить атрибут «Имя» в XAML, и вы получите переменную в коде, но использование MVVM будет намного более чистым и более проверяемым.) –

ответ

17

Для доступа а формы управления в коде-позади, вам нужно присвоить ему имя, используя x:Name атрибут

в XAML:

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

в коде:

MyList.ItemsSource = myData; 
+0

Thanks.It работает, но автозаполнение не распознает его. – techno

+0

Pls предлагает, если я хочу получить доступ, если из класса в платформе. Конкретный проект, унаследованный от PageRenderer с помощью ExportRenderer. –

7

Существует ошибка в Xamarin, где VS не видит заданного x: Название http://forums.xamarin.com/discussion/25409/problem-with-xaml-x-name-and-access-from-code-behind

Скажите, что вы определили изображение в XAML:

<Image x:Name="myImageXName" /> 

Тогда это должно работать в коде позади:

this.FindByName<Image>("myImageXName"); 
+0

Может подтвердить.Я все время сталкиваюсь с этой проблемой на Xamarin Studio и должен это делать. –

2

В моем случае проблема заключается в отсутствии линии XamlCompilation(XamlCompilationOptions.Compile)] в .xaml.cs файле.

Пример:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class MainPage : ContentPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     BindingContext = new MainPageViewModel(); 
    } 
    ... 
} 
Смежные вопросы