无法切换开关

时间:2017-04-01 17:23:55

标签: c# xaml

目前我正在编写基于Xamarin的应用程序。我的目标是根据表中的值切换开关。问题是,Xamarin没有注意到我的x:名称toggle_true连接到我的交换机。

这是我在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>

以下是代码背后的c#代码:

    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();
    }

注意它如何识别x:Name defineBuildingItems。我在toggled_true上遇到的错误是:当前命名空间中不存在名称toggled_true。有什么我做错了或错过了吗?

1 个答案:

答案 0 :(得分:1)

在datatemplate中按名称访问控件不起作用。你必须使用绑定。这只是一个例子:

型号:

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

代码背后:

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

你的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>