【发布时间】:2020-05-04 10:41:27
【问题描述】:
我试图在我的 Xamarin 应用程序中的两个内容页面 - MainPage 和 Page1 之间传递值,但没有成功。这是我的 MainPage.xaml
<ContentPage.BindingContext>
<local:FindPerimeter/>
</ContentPage.BindingContext>
<StackLayout>
<Label Text="A side here"/>
<Entry Placeholder="A side" Text="{Binding Aside}"/>
<Button Text="Next page" Clicked="Button_Clicked"/>
</StackLayout>
后面的按钮代码
private async void Button_Clicked(object sender, EventArgs e) => await Navigation.PushModalAsync(new Page1());
FindPerimeter.cs
public class FindPerimeter : ViewModelBase
{
string a_side;
public string Aside
{
get => a_side;
set
{
if (a_side == value) return;
a_side = value;
OnPropertyChanged();
Perimeter = Calculate(a_side).ToString();
}
}
string perimeter;
public string Perimeter
{
get => perimeter;
set
{
if (perimeter == value) return;
perimeter = value;
OnPropertyChanged();
}
}
double Calculate(string a)
{
return 2 * double.Parse(a);
}
}
V
iewModelBae.cs
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
和Page1.xaml代码
<ContentPage.BindingContext>
<local:FindPerimeter/>
</ContentPage.BindingContext>
<ContentPage.Content>
<StackLayout>
<Label Text="Perimeter is :"/>
<Label Text="{Binding Perimeter}"/>
</StackLayout>
</ContentPage.Content>
所以我想在 MainPage.xaml 和 Page1.xaml 之间传递 Perimeter 值,但它每次都是空的。我认为这是因为我在 Page1.xaml 中创建了另一个 BindingContext 但我不知道如何修复。我唯一的方法发现是把Perimeter属性设为static。
【问题讨论】:
-
将虚拟机作为参数传递给第二页的构造器
标签: c# xaml xamarin.forms