【问题标题】:Get id from table in Xamarin从 Xamarin 中的表中获取 id
【发布时间】:2017-03-21 18:10:55
【问题描述】:

在我的程序中,我试图从 Xamarin 应用程序的列表中获取当前 id,以便更改与 Id 等效的布尔值。

在应用程序中,用户由一个列表和一个与每个元素关联的开关表示。目标是在切换开关时将表中的布尔值从 false 更改为 true。

[

在我的 .cs 文件中,我在切换开关时更新布尔值(参见底部的 handle_toggled):

        public partial class DefineBuilding : ContentPage
    {
        //string currentDefineDescription;
        //int currentDefineId;

        DefineTable current; 


        private const string Url = "http://localhost:5000/define";
        private HttpClient _client = new HttpClient();
        private ObservableCollection<DefineTable> _define;


        public DefineBuilding(DefineTable defineList)
        {
            if (defineList == null) throw new ArgumentNullException();

            //BindingContext = defineList;

            //currentDefineId = defineList.defineId; 
            //currentDefineDescription = defineList.defineDescription;
            current = defineList;

            InitializeComponent();

            //defineList = Current_item.BindingContext;
        }


        protected override async void OnAppearing()
        {
            var content = await _client.GetStringAsync(Url);
            var posts = JsonConvert.DeserializeObject<IEnumerable<DefineTable>>(content);
            _define = new ObservableCollection<DefineTable>(posts);
            defineBuildingItems.ItemsSource = _define;


            base.OnAppearing();
        }

        async void Handle_Toggled(object sender, Xamarin.Forms.ToggledEventArgs e)
        {
            //current.defineId = 
            current.defineBool = true; 
            defineDataService defineTable = new defineDataService();
            await defineTable.UpdateData(current);

        }

        async void Handle_Clicked(object sender, System.EventArgs e)
        {
            await Navigation.PushAsync(new ChecklistPage());
        }




    }
}

但是,在处理拨动开关时,我无法获得 ID。在我的 xaml 文件中,我可以获得 ID,但是我不知道如何应用此 ID。

这是来自我的 Xaml 文件的示例(请参阅 BindingContext ="{Binding defineId}" 获取 Id):

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

                        </StackLayout>

                            <Switch BindingContext ="{Binding defineId}" HorizontalOptions="EndAndExpand" 
                                    Toggled="Handle_Toggled"/>

                        </StackLayout>

知道如何在我的班级中获得正确的 ID 吗?

【问题讨论】:

    标签: c# xaml xamarin


    【解决方案1】:

    sender 是触发事件的对象,在本例中是一个 Switch。而且由于您已将 id 分配为 Switch 的绑定上下文,因此您应该能够通过执行适当的强制转换来检索它:

    async void Handle_Toggled(object sender, Xamarin.Forms.ToggledEventArgs e)
        {
            var id = (int) ((Switch)sender).BindingContext;
    
            //current.defineId = 
            current.defineBool = true; 
            defineDataService defineTable = new defineDataService();
            await defineTable.UpdateData(current);
    
        }
    

    【讨论】:

    • 这行得通,谢谢!是否也可以从表格中取出其他元素?目前,当表格更新时,我的其他属性结果为空。
    • 如果不了解更多关于如何构建表格的信息,很难说。一般来说,ListView 更适合数据绑定列表。
    • 我的表是在后端的一个单独项目中创建的。是否可以从应用程序到后端项目进行查询(可能是 linq 查询)。或者有什么方法可以向后端项目执行请求并从那里进行查询?
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 2018-12-21
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多