你好,我正在使用Xamarin.Forms,我正面临ListView
中数据绑定的问题。模型中有一个字符串值,模型中有一个列表,列表是ListView的ItemsSource
,字符串值应显示在每个单元格行中。
XMAL视图
<ListView ItemsSource="{Binding StudentList, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text={Binding Name} />
<Label Text={Binding ConstantName} /> //// Not present in Itemsource. Should bind from Model. It does not render.
</Stacklayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C#
public ObservableCollection<PagingButtons> _lstPagingButtons { get; set; }
public ObservableCollection<PagingButtons> lstPagingButtons
{
get { return _lstPagingButtons; }
set
{
_lstPagingButtons = value;
OnPropertyChanged();
}
}
string _ConstantName {get; set;} = "Xamarin";
public string ConstantName
{
get { return _ConstantName; }
set { __ConstantName = value; OnPropertyChange();
}
我知道我可以将ConstantName
添加到PagingButtons
类中,但是我确实有30-40类的这种情况,这样做会很乏味,而且不会是有效的方法。
答案 0 :(得分:4)
我将假设您的ContentPage
周围有一个ListView
,但这可以是任何页面(甚至元素)。
为该页面提供一个名称(如果还没有名称的话),例如:<ContentPage x:Name="MyAwesomePage" ...>
现在,将您的Label
更改为:<Label Text={Binding BindingContext.ConstantName, Source={x:Reference Name=MyAwesomePage}} />
通过这种方式,您将绑定引用到页面的BindingContext
,从而有效地改变了范围。
答案 1 :(得分:1)
您可以轻松完成
<Label Text={Binding Source={x:Reference root}, Path=BindingContext._ConstantName}