use*_*505 1 datatemplate xamarin xamarin.forms
我不能让数据绑定在Xamarin表单中的DataTemplate中工作.我可以使用Listview(即绑定RowHeight),但是在DataTemplate中,将东西设置为我的ViewModel的属性没有任何影响.
在下面的示例中,如果我将ColumnDefinition.Width设置为属性,则完全忽略它,但将其设置为硬值可正常工作.我已经放入一个标签来查看属性值是什么,并且在Datatemplate内部时它变成空白,我已经重新检查了属性是否正确,因为如果我从Listview中取出标签,它会显示正确的值.
有任何想法吗?
更新:我的班级是"ParentPage",它有2个属性:"患者"和"设置".患者有一个可观察的"PatientList"集合,我将如何绑定到标签下面显示的"Settings.Fontsize".我尝试过每一个我能想到的组合:
<ListView x:Name="listView" ItemsSource="{Binding ParentPage.Patients.PatientsList}" RowHeight="{Binding ParentPage.Settings.RowHeight}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid HorizontalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.Row="0" Grid.Column="0"
Source="{Binding Picture}" />
<Label TextColor="Red" Text="{Binding ParentPage.Settings.FontSize}"
HorizontalOptions="Center" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)
BindingContext,换句话说就是listview的"ItemsSource",适用于整个listview,包括DataTemplate.所以,如果你想绑定一些东西,那么它的属性应该在BindingContext中,在你的情况下它是患者.所以,Pasient类应该包含这个属性.但是,有一个技巧.如果你想绑定一些东西,那不是在listview绑定上下文中,那么你应该命名你的listview,比如x:Name ="YourListView",然后在你的datatemplate中为你的绑定写这个:
Property="{Binding Source={x:Reference Name = "YourListView"},
Path=BindingContext.YourNameOfPropertyInViewModel}"
Run Code Online (Sandbox Code Playgroud)
这样,您的属性将使用listview元素级别的绑定上下文,即您的案例中的ViewModel.
| 归档时间: |
|
| 查看次数: |
2130 次 |
| 最近记录: |