Ändern Sie die Elementsteuerungseigenschaft des aktivierten Listenansichtselements Xamarin.Forms

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


34
1

Antwort:

Gelöst

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