我一直在解決有關XAML中的數據綁定問題。綁定DataTemplate中的自定義控件
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Pedagouge.Views;assembly=Pedagouge"
x:Class="Pedagouge.Views.StudentGroupView">
<StackLayout>
<ListView x:Name="Students">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<local:PhotoView x:Name="Photo" Persona="{Binding}" />
<StackLayout Orientation="Vertical" HorizontalOptions="StartAndExpand" VerticalOptions="StartAndExpand">
<Label Text="{Binding FullName}" />
<Label Text="{Binding StudentIsAt.Group.Name}" />
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
我以爲我有綁定的想法,但我有問題清楚地表明我不是。 不管怎麼說,問題是,自定義控制PhotoView
似乎使用{Binding}
的財產Persona
結合上下文是PhotoView
的BindingContext
,而不是DataTemplate
的情況下,因爲它是爲Label
SA幾排下來。
,如果獲得WPF,我會只是改變了結合
Persona="{Binding DataContext,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListBoxItem}}"
而且很可能有固定的,但不會在這裏工作(顯然是沒有定義的RelativeSource)。
怎麼回事?我如何才能使Persona
與DataTemplate
的情況相關聯,如Label
的情況那樣?
如果你添加一個屬性'Self {get {return this; }}'在你的viewmodel上,然後把PhotoView.Persona上的綁定改爲'{Binding Self}'?另外..看看這個:http://stackoverflow.com/questions/22595388/binding-usercontrol-inside-a-listview-datatemplate-wpf – mrtig 2014-10-04 15:45:57
@mrtig聽起來這樣仍然會給我一個參考視圖模型,而不是當前綁定到DataTemplate的項目 – fredrik 2014-10-04 15:49:04
是的,我想你是對的。您可以嘗試綁定集合的每個成員上的「self」屬性。 ..或者你可以嘗試'ElementName'建議(在上面的鏈接中)。 – mrtig 2014-10-04 15:54:49