使Xamarin DisplayActionSheet选中,在Label中显示值

时间:2017-01-07 17:26:28

标签: xamarin

我已将ContentPage连接到类(g)的实例,这种情况可以正常工作:

  • 打开页面
  • 在条目框中输入值
  • 从DisplayActionSheet中选择
  • 点击保存

OnSave UI中的所有值均以g为单位,但DisplayActionSheet中的值不在我期望的UI中。

运行DisplayActionSheet之后,我希望AisleDepthText的值能够在UI中显示。

这是我实例化为变量g

的类
public class GroceryItemForSaving
{
    public GroceryItemForSaving() { }
    public event PropertyChangedEventHandler PropertyChanged;
    private string _AisleDepth;
    public string AisleDepth
    {
        get
        {
            return _AisleDepth;
        }
        set
        {
            _AisleDepth = value;
            OnPropertyChanged();
        }
    }
    private string _AisleDepthText;
    public string AisleDepthText
    {
        get
        {
            return _AisleDepthText;
        }
        set
        {
            _AisleDepthText = value;
            OnPropertyChanged();
        }
    }
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我像这样制作BindingContext:

public NewGrocery()
{
    InitializeComponent();
    BindingContext = g;
}

这是相关的XAML。

<Label Text="GroceryName" Grid.Row="0" Grid.Column="1" ></Label>
<Entry Text="{Binding GroceryName}" Grid.Row="0" Grid.Column="2" ></Entry>

<Label Text="Aisle" Grid.Row="1" Grid.Column="1" ></Label>
<Entry Text="{Binding Aisle}" Grid.Row="1" Grid.Column="2"></Entry>

<Label Text="Aisle Depth" Grid.Row="2" Grid.Column="1" ></Label>
<Label Text="{Binding AisleDepthText, Mode=OneWay}" Grid.Row="2" Grid.Column="2" ></Label>
<Button Clicked="ShowAisleDepthChoices" Grid.Row="2" Grid.Column="3" Text="Aisle Depth" ></Button>

按钮单击处理程序ShowAisleDepthChoices,使ActionSheet显示。在我的代码中,我设置了AisleDepth和AisleDepthText的值,如下所示:

public async void ShowAisleDepthChoices(object sender, EventArgs e)
{
    var AisleDepth = 0;
    var SelectedAisleDepth = await DisplayActionSheet("Aisle Depth", "Cancel", null, "Front", "Middle", "Back", "Back Wall");
    switch (SelectedAisleDepth)
    {
        case "Front":
            AisleDepth = 1;
            break;
        case "Middle":
            AisleDepth = 2;
            break;
        case "Back":
            AisleDepth = 3;
            break;
        case "Back Wall":
            AisleDepth = 4;
            break;
    }
    g.AisleDepthText = SelectedAisleDepth;
    g.AisleDepth = AisleDepth.ToString();
}

然后在AisleDepthText Label中没有出现任何值,但是当我单击Save时,值在g.AsileDepthText和g.AisleDept中正好在我期望的位置。注意:我可以直接在UI中输入GroceryName,并在保存时以g.GroceryName结尾。

在DisplayActionSheet执行此操作后,我需要做什么才能使g.AisleDepthText的值出现在UI中?

1 个答案:

答案 0 :(得分:0)

GroceryItemForSaving需要实现INotifyPropertyChanged。您必须编写代码以满足实现,但您没有声明该类使用该接口,因此您的绑定不会像它应该更新。

public class GroceryItemForSaving : INotifyPropertyChanged