首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContentView Xamarin型

ContentView Xamarin型
EN

Stack Overflow用户
提问于 2018-08-03 12:47:51
回答 2查看 968关注 0票数 4

总的来说,我还在学习Xamarin表单和C#。因此,在我的MainPage.xaml中,我有这样的内容:

代码语言:javascript
复制
    <StackLayout>
        <Button Text="bttn1" Clicked="Button_Clicked"/>
        <Button Text="bttn2" Clicked="Button_Clicked_1"/>

        <ContentView x:Name="DisplayCustomContentView">

        </ContentView>
    </StackLayout>

和两个ContentViews:

意见1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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"}
            }
        };
    }
}

所以,当我点击按钮时,我想在视图之间交换。我试过这样做:

代码语言:javascript
复制
   private void Button_Clicked(object sender, EventArgs e)
    {
        DisplayCustomContentView = new View1();
    }

如何从Entry字段中获取值?

我很确定我做的不是正确的。我需要所有我能得到的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-06 03:41:08

回答你的问题:

如何从输入字段中获取值?

有简单的答案,也有不那么简单的答案。

简单的答案是存储对条目对象的引用,因为您要在View1和View2中构建C# (而不是XAML):

代码语言:javascript
复制
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类,如下所示:

代码语言:javascript
复制
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等)的其他方面,我鼓励您了解更多,但这超出了最初问题的范围。

票数 1
EN

Stack Overflow用户

发布于 2018-08-03 12:54:37

您需要设置内容property

代码语言:javascript
复制
private void Button_Clicked(object sender, EventArgs e)
{
    DisplayCustomContentView.Content = new View1();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51673026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档