Ich arbeite mit Xamarin.Forms in einem PCL-Projekt.Wie kann ich feststellen, welcher Xamarin Forms Eintrag in einem ListView geändert wurde?
Ich habe eine Seite/Bildschirm, wo es ein ListView-Steuerelement gibt. Ich habe eine benutzerdefinierte DataTemplate für ViewCell erstellt.
Diese ViewCell hat verschiedene Steuerelemente: einige Labels, einen Button und auch einen Eintrag.
<ListView x:Name="lvProducts" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout BackgroundColor="#FFFFFF" Orientation="Vertical">
<Grid Padding="5">
...
<Button Grid.Row="0" Grid.Column="1" Text="X"
CommandParameter="{Binding MarkReference}"
Clicked="DeleteItemClicked" />
...
<StackLayout Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal" >
<Label Text="Ref.: " FontSize="24" FontAttributes="Bold" TextColor="#000000" />
<Label Text="{Binding Reference}" FontSize="24" TextColor="#000000" />
</StackLayout>
...
<Entry Grid.Row="3" Grid.Column="1" Text="{Binding NumElements}"
Keyboard="Numeric" Placeholder="" FontSize="24"
HorizontalTextAlignment="Center" Focused="OnItemFocus"
Unfocused="OnItemUnfocus" />
</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Ich mag zwei Dinge mit dieser Eingangskontrolle erreichen, die ich nicht in der Lage zu erreichen bin:
Erstens, wenn ich ein neues Element hinzufügen, würde Ich mag, dass dieses neue Element seinen Eintrag hat den Fokus , bereit, mit der Eingabe zu beginnen.
Zweitens, wenn der Benutzer endet, um einen Wert in den Eintrag zu schreiben, möchte ich den Wert des dahinter ändern. Ich würde gerne wissen, welchen Eintrag von ListView geändert hat. Ich habe versucht, das Unfocused-Ereignis zu verwenden, aber in den Parametern der Methode, die gestartet wird, verfügt nur über einen Absenderparameter, der das Entry-Objekt zurückgibt, keine Referenz über das Modell, das gebunden hat.
public void OnItemUnfocus(object sender, EventArgs e)
{
Entry entry = (Entry)sender;
//Here I would like to know the model object that's binded
//with this Entry/CellView item
}
Wie kann ich diese beiden Punkte erreichen?
den zweiten Punkt betrifft, wenn Sie benötigen Wenn Sie auf das Datenobjekt zugreifen, können Sie 'OnBindingContextChanged' in der Zelle überschreiben und dann das Objekt mit' var object = (YourClass) BindingContext 'abrufen. Auf diese Weise können Sie jederzeit auf das Objekt in der Datenquelle zugreifen. – markusian
Danke @markusian, ich habe deine Idee, und ich habe es benutzt. Ich habe das Entry-Steuerelement erweitert und ich in Unfocused Event verwendet. Funktioniert gut. – stivex