DataTemplate с привязкой данных из двух источников - PullRequest
0 голосов
/ 20 июня 2020

У меня есть шаблон данных с изображением, у которого есть привязка свойства Source к источнику по умолчанию (наблюдаемая коллекция, она отлично работает). Проблема в том, что мне нужна привязка его свойства IsVisible к другому источнику (объект, объявленный в моем коде позади), но при запуске приложения я получаю это на консоли:

Binding: 'ScrollEvent' property not found on 'Xamarin.Forms.Binding', target property: 'FFImageLoading.Forms.CachedImage.IsVisible'

Relevant части моего кода:

MyPage.xaml

<DataTemplate x:Key="MapMsgSend">

 ...

   <ffimageloading:CachedImage
        Source="{Binding imageSource}" 
        IsVisible="{Binding Source={Binding MyPage}, Path=ScrollEvent.Visibility}">
   </ffimageloading:CachedImage>

 ...

</DataTemplate>

MyPage.xaml.cs (связанная часть)


namespace Project.XAML
{
    public partial class MyPage : ContentPage
    {
       public MyPage(){
         this.BindingContext=this;
       }
       public IsScrolling ScrollEvent = new IsScrolling() { ShowImage = true };
    } 
}

EDIT

public class IsScrolling : INotifyPropertyChanged
{
      private bool _ShowImage { get; set; }
      public bool ShowImage
      {
          get { return _ShowImage; }
          set
          {
              _ShowImage = value;
              NotifyPropertyChange("ShowImage");
          }
      }

      public event PropertyChangedEventHandler PropertyChanged;
      void NotifyPropertyChange(string PropName)
      {
          if (PropertyChanged != null)
              PropertyChanged(this, new PropertyChangedEventArgs(PropName));
      }
}

//default value
public IsScrolling ScrollEvent = new IsScrolling() { ShowImage = true };

1 Ответ

1 голос
/ 21 июня 2020

синтаксис должен быть примерно таким

<ContentPage ... x:Name="page">
...

<ffimageloading:CachedImage
    Source="{Binding imageSource}" 
    IsVisible="{Binding Source={x:Reference page},Path=ScrollEvent.Visibility}"

вы можете привязать только к publi c properties

это publi c, но это не является свойством

public IsScrolling ScrollEvent = new IsScrolling() { ShowImage = true };

, ему необходимо get и / или set, чтобы быть свойством, например

public IsScrolling ScrollEvent { get; set; } = new IsScrolling() { ShowImage = true };
...