我已将ContentPage连接到类(g)的实例,这种情况可以正常工作:
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中?
答案 0 :(得分:0)
GroceryItemForSaving需要实现INotifyPropertyChanged。您必须编写代码以满足实现,但您没有声明该类使用该接口,因此您的绑定不会像它应该更新。
public class GroceryItemForSaving : INotifyPropertyChanged