Listview Viewcell绑定上下文在xamarin表单中不起作用

Listview Viewcell绑定上下文在xamarin表单中不起作用,listview,xamarin.forms,relativesource,Listview,Xamarin.forms,Relativesource,我有一个listview和许多ViewCell。Itemstemplate是使用MessageTemplateSelector类选择的。在MainViewModel中有一个消息集合。我已将消息集合绑定到listview中。很好用。但是viewcell UI元素与名为ShowSenderIcon的viewmodel属性绑定,该属性未绑定到UI元素中。我试过许多建议。但它不起作用。我的示例代码如下所述,请参考,我的要求是使用viewmodel(ShowSenderIcon)属性隐藏框架 我试过这个

我有一个listview和许多ViewCell。Itemstemplate是使用MessageTemplateSelector类选择的。在MainViewModel中有一个消息集合。我已将消息集合绑定到listview中。很好用。但是viewcell UI元素与名为ShowSenderIcon的viewmodel属性绑定,该属性未绑定到UI元素中。我试过许多建议。但它不起作用。我的示例代码如下所述,请参考,我的要求是使用viewmodel(ShowSenderIcon)属性隐藏框架

我试过这个

MainPage.xaml

<sync:SfListView
  x:Name="ListView"
  Grid.Row="0"
  Margin="0"
  AutoFitMode="Height"
  IsBusy="True"
  ItemSize="100"
  ItemSpacing="10"
  ItemTemplate="{StaticResource MessageTemplateSelector}"
  ItemsSource="{Binding Messages}"
  SelectionMode="None"
  VerticalOptions="Start"/>

IncomingViewCell.cs

<Frame
  x:Name="avatorFrame"
  CornerRadius="25"
  HasShadow="false"
  IsVisible="{Binding Path=BindingContext.ShowSenderIcon, Source={x:Reference ListView}, Mode=TwoWay}"
  OutlineColor="Gray"/>
private bool showSenderIcon = false;
public bool ShowSenderIcon
{
   get { return showSenderIcon; }
   set { showSenderIcon = value; OnPropertyChanged("ShowSenderIcon"); }
}

private ObservableCollection<Message> messagesList;
public ObservableCollection<Message> Messages
{
   get { return messagesList; }
   set { messagesList = value; }
}

public MainPageViewModel()
{
   Messages = new ObservableCollection<Message>();
   Messages.Add(new Message { Text = "Hi", IsIncoming = true, MessagDateTime = DateTime.Now, ShowTimeStamp = false });
}

MainPageViewModel.cs

<Frame
  x:Name="avatorFrame"
  CornerRadius="25"
  HasShadow="false"
  IsVisible="{Binding Path=BindingContext.ShowSenderIcon, Source={x:Reference ListView}, Mode=TwoWay}"
  OutlineColor="Gray"/>
private bool showSenderIcon = false;
public bool ShowSenderIcon
{
   get { return showSenderIcon; }
   set { showSenderIcon = value; OnPropertyChanged("ShowSenderIcon"); }
}

private ObservableCollection<Message> messagesList;
public ObservableCollection<Message> Messages
{
   get { return messagesList; }
   set { messagesList = value; }
}

public MainPageViewModel()
{
   Messages = new ObservableCollection<Message>();
   Messages.Add(new Message { Text = "Hi", IsIncoming = true, MessagDateTime = DateTime.Now, ShowTimeStamp = false });
}
private bool showSenderIcon=false;
公共图书馆
{
获取{return showSenderIcon;}
设置{showSenderIcon=value;OnPropertyChanged(“showSenderIcon”);}
}
私有可观察收集消息列表;
公共可观察收集消息
{
获取{返回消息列表;}
设置{messagesList=value;}
}
公共MainPageViewModel()
{
消息=新的ObservableCollection();
添加(新消息{Text=“Hi”,IsIncoming=true,MessagDateTime=DateTime.Now,showtimestmap=false});
}

您是否遇到任何异常?我不明白您为什么需要
标记扩展名
,您可以简单地执行此操作:
IsVisible=“{Binding Path=BindingContext.ShowSenderIcon,Source={x:Reference Source ListView}}
您也可以选择一个不同于“ListView”的名称“最后,我不认为有必要使用双向模式,所以暂时不要使用这种模式来统治它。”out@GeraldVersluis,谢谢你的回复,我已经按照你的建议尝试过了,它抛出了System.Reflection。TargetInvocationException@GeraldVersluis,对这个例外有什么建议吗?你能分享这个例外发生的时间和地点的细节吗?