Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.Forms的绑定问题_Xamarin.forms_Binding - Fatal编程技术网

Xamarin.Forms的绑定问题

Xamarin.Forms的绑定问题,xamarin.forms,binding,Xamarin.forms,Binding,我知道这是一个基本的约束问题,但我不明白它是如何与Xamarin一起工作的。(因此,任何指向好的解释的链接都比wellcome更多) 我正在尝试做一个“编辑成分页面”,并尝试将成分属性绑定到html。我有两个问题: 1.名为original的标签不显示Ingridient.ToString 2.如果我更改了金额的值并按了“保存”按钮,则不会更改此ViewIngredientPage之前页面上的内容 我做错了什么 我对该类有以下定义: [XamlCompilation(XamlCompilatio

我知道这是一个基本的约束问题,但我不明白它是如何与Xamarin一起工作的。(因此,任何指向好的解释的链接都比wellcome更多)

我正在尝试做一个“编辑成分页面”,并尝试将成分属性绑定到html。我有两个问题: 1.名为original的标签不显示Ingridient.ToString 2.如果我更改了金额的值并按了“保存”按钮,则不会更改此ViewIngredientPage之前页面上的内容

我做错了什么

我对该类有以下定义:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ViewIngredientPage : ContentPage
{
    public Ingredient Ingredient { get; set; }

    public ViewIngredientPage(Ingredient item)
    {
        InitializeComponent();
        Ingredient = item;
        DataGrid.BindingContext = Ingredient;
        UnitsPicker.ItemsSource = Ingredient.PossibleUnitsList.Keys.ToList();
   }

    public ViewIngredientPage()
    {
        InitializeComponent();
        DataGrid.BindingContext = Ingredient;
        UnitsPicker.ItemsSource = Ingredient.PossibleUnitsList.Keys.ToList();
    }

    private void saveButton_click(object sender, EventArgs e)
    {
        Navigation.PopAsync();
    }
} }

以及Xaml页面的以下定义:

    <ContentPage.Content>
        <StackLayout>
            <StackLayout Orientation="Horizontal">
                <Label Text="The original:" />
                <Label Text="{Binding Path=ToString }" x:Name="Original" />
            </StackLayout>

            <StackLayout Orientation="Horizontal">
                <Label Text="Suggested:"/>
                <Label Text="{Binding Path=ToString }" x:Name="SuggestedText" />
            </StackLayout>

            <Grid x:Name="DataGrid">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <Label Text="Edit" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />

                <Label Text="Amount:" Grid.Row="1" Grid.Column="0"/>
                <Entry Text="{Binding Amount, Mode=TwoWay}" Grid.Row="1" Grid.Column="1" />

                <Label Text="Units" Grid.Row="2" Grid.Column="0"/>
                <Picker x:Name="UnitsPicker" SelectedItem="{Binding Units, Mode=TwoWay}" Grid.Row="2" Grid.Column="1" />

                <Label Text="Item" Grid.Row="3" Grid.Column="0"/>
                <Entry Text="{Binding Item, Mode=TwoWay}" Grid.Row="3" Grid.Column="1"/>

            </Grid>
            <StackLayout Orientation="Horizontal">
                <Button Text="Save" Clicked="saveButton_click" />
                <Button Text="Cancel" />
            </StackLayout>

        </StackLayout>
    </ContentPage.Content>
</ContentPage> 


首先,您要为一些单独的元素设置BindingContext,而不是为整个页面设置BindingContext。其次,只能绑定到公共属性。ToString()是一个方法,而不是一个属性。是的,这就是我想要的,将元素绑定到上下文。我确实看到了该方法的绑定,但我无法理解为什么它在我的案例“在我的案例”中不起作用-不支持绑定到方法。您只能绑定到公共属性。