Seb
Seb

Reputation: 183

not able to toggle Switch

At the moment I am programming an application based on Xamarin. My goal is to toggle the switch based on values in a table. Problem is, Xamarin is not noticing my x:Name toggle_true connected to my switch.

Here is my script in xaml:

<ListView x:Name="defineBuildingItems">
            <ListView.ItemTemplate>
                <DataTemplate>

                    <ViewCell>

                            <StackLayout Orientation="Horizontal">
                            <StackLayout Orientation="Vertical">
                                <Label  Text="{Binding defineDescription}"  x:Name="Current_item"/>

                            </StackLayout>

                                <Switch BindingContext ="{Binding defineId}" HorizontalOptions="EndAndExpand" 
                                        Toggled="Handle_Toggled"  x:Name="toggled_true"/>

                            </StackLayout>

                    </ViewCell>

                </DataTemplate>
            </ListView.ItemTemplate>
            </ListView>

Here is my c# code in code behind:

    var currentQuestions = _define.Where(s => DefineId.Contains(s.defineId));

        //Remember what building was defined like last time defineBuilding was proceeded.
        foreach (DefineTable i in currentQuestions)
        {

            toggled_true.IsToggled = true; 

        }

        defineBuildingItems.ItemsSource = posts;
        base.OnAppearing();
    }

Notice how it recognizes the x:Name defineBuildingItems. The error i get on toggled_true is: The name toggled_true does not exist in the current namespace. Is there something I am doing wrong or missing?

Upvotes: 1

Views: 850

Answers (1)

FetFrumos
FetFrumos

Reputation: 5964

Access to control by name inside datatemplate not working. You must using binding. This is simply example:

Model:

 public class Data
 {
     public bool IsToggled {get;set;}
     ....  
 }

Code behind:

public YourPage
{
  BindingContext = this;
}    
 ....
private List<Data> _items; 
public List<Data> Items
{
   get { return _items;} 
   set 
     {
        _items = value;
        OnPropertyChanged();
     }
}

Your xaml:

<ListView x:Name="defineBuildingItems" ItemSources={Binding Items}>
    <ListView.ItemTemplate>
        <DataTemplate>

            <ViewCell>

                    <StackLayout Orientation="Horizontal">
                    <StackLayout Orientation="Vertical">
                        <Label  Text="{Binding defineDescription}"      />

                    </StackLayout>

                        <Switch IsToggled ="{Binding IsToggled, Mode =TwoWay}" HorizontalOptions="EndAndExpand" />

                    </StackLayout>

            </ViewCell>

        </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>

Upvotes: 2

Related Questions