Listview Viewcell绑定上下文在xamarin表单中不起作用
我有一个listview和许多ViewCell。Itemstemplate是使用MessageTemplateSelector类选择的。在MainViewModel中有一个消息集合。我已将消息集合绑定到listview中。很好用。但是viewcell UI元素与名为ShowSenderIcon的viewmodel属性绑定,该属性未绑定到UI元素中。我试过许多建议。但它不起作用。我的示例代码如下所述,请参考,我的要求是使用viewmodel(ShowSenderIcon)属性隐藏框架 我试过这个 MainPage.xamlListview Viewcell绑定上下文在xamarin表单中不起作用,listview,xamarin.forms,relativesource,Listview,Xamarin.forms,Relativesource,我有一个listview和许多ViewCell。Itemstemplate是使用MessageTemplateSelector类选择的。在MainViewModel中有一个消息集合。我已将消息集合绑定到listview中。很好用。但是viewcell UI元素与名为ShowSenderIcon的viewmodel属性绑定,该属性未绑定到UI元素中。我试过许多建议。但它不起作用。我的示例代码如下所述,请参考,我的要求是使用viewmodel(ShowSenderIcon)属性隐藏框架 我试过这个
<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,对这个例外有什么建议吗?你能分享这个例外发生的时间和地点的细节吗?