我无法在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>
答案 0 :(得分:7)
BindingContext,换句话说就是listview的“ItemsSource”,正在应用于整个列表视图,包括DataTemplate。所以,如果你想绑定一些东西,那么它的属性应该在BindingContext中,在你的情况下它是患者。所以,Pasient类应该包含这个属性。但是,有一个技巧。如果你想绑定一些东西,那不是在listview绑定上下文中,那么你应该命名你的listview,比如x:Name =“YourListView”,然后在你的datatemplate中为你的绑定写下这个:
Property="{Binding Source={x:Reference Name = "YourListView"},
Path=BindingContext.YourNameOfPropertyInViewModel}"
这样,您的属性将使用listview元素级别的绑定上下文,即您的案例中的ViewModel。