总的来说,我还在学习Xamarin表单和C#。因此,在我的MainPage.xaml中,我有这样的内容:
<StackLayout>
<Button Text="bttn1" Clicked="Button_Clicked"/>
<Button Text="bttn2" Clicked="Button_Clicked_1"/>
<ContentView x:Name="DisplayCustomContentView">
</ContentView>
</StackLayout>和两个ContentViews:
意见1:
public class View1 : ContentView
{
public View1 ()
{
Content = new StackLayout {
Children = {
new Label { Text = "View 1" },
new Entry {Placeholder = "entry1 View 1"},
new Entry {Placeholder = "entry2 View 1"}
}
};
}
}意见2:
public class View2 : ContentView
{
public View2 ()
{
Content = new StackLayout {
Children = {
new Label { Text = "View 2" },
new Entry {Placeholder = "entry2 View 1"},
new Entry {Placeholder = "entry2 View 2"}
}
};
}
}所以,当我点击按钮时,我想在视图之间交换。我试过这样做:
private void Button_Clicked(object sender, EventArgs e)
{
DisplayCustomContentView = new View1();
}如何从Entry字段中获取值?
我很确定我做的不是正确的。我需要所有我能得到的帮助!
发布于 2018-08-06 03:41:08
回答你的问题:
如何从输入字段中获取值?
有简单的答案,也有不那么简单的答案。
简单的答案是存储对条目对象的引用,因为您要在View1和View2中构建C# (而不是XAML):
public class View1 : ContentView
{
public Entry Entry1 { get; private set; }
public Entry Entry2 { get; private set; }
public View1 ()
{
Entry1 = new Entry { Placeholder = "entry1 View 1" };
Entry2 = new Entry { Placeholder = "entry1 View 2" };
Content = new StackLayout {
Children = {
new Label { Text = "View 1" },
Entry1,
Entry2
}
};
}
}然后,在某些按钮回调或命令中(或在程序获得控制时),您可以查看entered 1、what和entered 2属性,查看用户输入的内容。
现在转到不那么简单的方式,MVVM和模型绑定。虽然这方面的代码涉及得更多,但它是编写Xamarin.Forms应用程序的一种非常流行的方法,因为它使您能够更好地将视图代码与其他逻辑分离开来。这可以帮助您将应用程序中的关注点分离开来,以提高可测试性、可维护性等。您可以使用Xamarin内置的特性来做到这一点,但是很多人喜欢使用各种MVVM包来进一步支持MVVM原则。
为了给出一个使用View1的简单说明(只使用内置的Xamarin.Forms特性),您还可以创建一个View1ViewModel类,如下所示:
public class View1ViewModel
{
public string Entry1 { get; set; }
public string Entry2 { get; set; }
}
public class View1 : ContentView
{
public View1ViewModel ViewModel { get; private set; }
public View1 ()
{
ViewModel = BindingContext = new View1ViewModel();
var entry1 = new Entry { Placeholder = "entry1 View 1" };
var entry2 = new Entry { Placeholder = "entry1 View 2" };
entry1.SetBinding(Entry.TextProperty, "Entry1");
entry2.SetBinding(Entry.TextProperty, "Entry2");
Content = new StackLayout {
Children = {
new Label { Text = "View 1" },
entry1,
entry2
}
};
}
}在这个模型中,其他代码可以查看视图模型,而不是直接查看底层UI元素(条目对象)上的属性,因为当条目的值发生变化时,这些属性会自动更新。
虽然这个示例代码随着模型绑定的增加而变得更大,但当使用XAML时,它会更简洁一些。
当然,还有MVVM (INotifyPropertyChanged等)的其他方面,我鼓励您了解更多,但这超出了最初问题的范围。
发布于 2018-08-03 12:54:37
您需要设置内容property。
private void Button_Clicked(object sender, EventArgs e)
{
DisplayCustomContentView.Content = new View1();
}https://stackoverflow.com/questions/51673026
复制相似问题