2017-01-20 15 views
0

У меня есть Xamarin.Forms проект с частью pcl-части и родной версией win, ios и android. Вся структура страницы и модели просмотра находятся в pcl-части. Работа с приложениями прекрасна, но когда я пытаюсь, например, скрыть Grid от кода позади - ничего не делать. Вот пример кода:Невозможно получить доступ к элементам управления из кода позади в pcl части проекта xamarin

Xaml:

<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="SomeNamespase.SomePage"> 

    <Grid x:Name="InnerGrid" BackgroundColor="Green"> 
     <Frame x:Name="InnerContent"/> 
    </Grid> 
</ContentPage> 

.cs:

using System; 

namespace SomeNamespase 
{ 
    public partial class SomePage : ContentPage 
    { 
     public void SomeMethod() 
     { 
      this.InnerGrid.IsVisible = false; 
      this.InnerContent.BackgroundColor = Color.Aqua;   
     } 
    } 
} 

Я также попытался this.FindByName<Grid>("InnerGrid"); тот же результат

Примечание: если я пытаясь получить контроль над действием в PCL, все хорошо. Ничего не происходит, когда я пытаюсь получить элементы управления из ViewPresenter в проектах Windows (или других платформ).

+0

Вы пытались связать видимость сетки с объектом в ViewModel? –

+0

Да, неудобно также не помогло –

+0

Если вы установили точку останова, выполняются ли строки кода? – stepheaw

ответ

0

Вы должны убедиться, что вы правильно реализации INotifyPropertyChanged

protected virtual void OnPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

Да, INotifyPropertyChanged правильно реализован в viewModel ... –

0

Пожалуйста, попробуйте следующий код, как в коде я не могу видеть конструктор.

using System; 

namespace SomeNamespase 
{ 
    public partial class SomePage : ContentPage 
    { 
     public SomePage() 
     { 
      SomeMethod() ; 
     } 
     public void SomeMethod() 
     { 
      this.InnerGrid.IsVisible = false; 
      this.InnerContent.BackgroundColor = Color.Aqua;   
     } 
    } 
} 
+0

Извините за не полный код, конструктор там. Но метод должен использоваться не в constuctor, а во время выполнения, когда мы используем один из реализованных интерфейсов метода –