Hy, Ich versuche, eine Kommentareingabe anzuzeigen, wenn das Kontrollkästchen für das Element aktiviert ist, und es sonst auszublenden, ich habe dieses XAML
<ListView ItemsSource = "{Binding TaskItems}" x:Name = "TasksItems" HasUnevenRows = "True" VerticalScrollBarVisibility = "Default" SelectionMode = "None">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout IsVisible = "True" Orientation = "Vertical">
<Grid BackgroundColor = "White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height = "auto" />
</Grid.RowDefinitions>
<StackLayout Grid.Column = "0" Grid.Row = "0">
<input:CheckBox Type = "Box" IsChecked = "{Binding TaskChecked , Mode=TwoWay}"/>
</StackLayout>
<StackLayout Grid.Column = "0" Grid.Row = "1" IsVisible = "{Binding CommentRequired}">
<Entry BackgroundColor = "White" PlaceholderColor = "Black" HeightRequest = "40" TextColor = "Black"/>
</StackLayout>
</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
und ich habe diesen C# -Code, um die Elemente aus der Datenbank zu lesen
public class TaskData
{
public bool TaskChecked { get; set; }
public bool CommentRequired { get; set; }
}
public partial class HomePage : ContentPage
{
public HomePage()
{
ObservableCollection<TaskData> TaskItems { get; set; }
ObservableCollection<TaskData> TasksList;
TaskItems = new ObservableCollection<TaskData>();
//Loop the tasks from database result
While...
TaskItems.Add(new TaskData
{
TaskChecked = false,
CommentRequired = false,
});
//End Loop
TasksListView.ItemsSource = TaskItems;
}
}
Jetzt muss ich ein "CheckChanged"-Ereignis hinzufügen, um den Kommentareintrag (IsVisible="True") anzuzeigen, wenn der Benutzer das Kontrollkästchen des zielgerichteten Listview-Elements aktiviert
Vielen Dank
Fügen Sie zuerst das Ereignis hinzu.
<input:CheckBox Type = "Box" IsChecked = "{Binding TaskChecked , Mode=TwoWay}" CheckedChanged = "OnCheckBoxCheckedChanged"/>
Name für den zweiten Stack hinzufügen
<StackLayout x:Name = "StackLayoutEntry" Grid.Column = "0" Grid.Row = "1" IsVisible = "{Binding CommentRequired}">
<Entry BackgroundColor = "White" PlaceholderColor = "Black" HeightRequest = "40" TextColor = "Black"/>
</StackLayout>
Verwenden Sie dann in Code Behind diese Funktion, um den Eintrag für das angeklickte Kontrollkästchen zu finden
void OnCheckBoxCheckedChanged(object sender, CheckedChangedEventArgs e)
{
var Sender = (CheckBox)sender;
var stacklayoutentry = Sender.Parent.FindByName<StackLayout>("StackLayoutEntry");
stacklayoutentry.IsVisible = True;
}
Das könnte dir auch helfen Prüfen
Ein anderer Ansatz, aber Sie erhalten eine Kennung für Ihren ausgewählten Artikel. Prüfen