ContentView Xamarin表单

时间:2018-08-03 12:47:51

标签: c# android xamarin xamarin.forms

我总体上仍在学习Xamarin Forms和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字段中获取值?

我几乎可以肯定我的做法不正确。我会尽我所能获得所有帮助!

2 个答案:

答案 0 :(得分:1)

您需要设置内容property

private void Button_Clicked(object sender, EventArgs e)
{
    DisplayCustomContentView.Content = new View1();
}

答案 1 :(得分:1)

回答您的问题:

  

我如何从Entry字段中获取值?

有一个简单的答案,而不是那么简单的答案。

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

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
            }
        };
    }
}

然后,在某些按钮回调或Command中(或在程序获得控制权时),您可以查看Entry1.Text和Entry2.Text属性以查看用户输入的内容。

现在使用不是那么简单的方法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元素(Entry对象)上的属性,因为当条目的值更改时,这些属性会自动更新。

尽管此示例代码确实通过添加模型绑定而变得更大,但是使用XAML时它往往更加简洁。

当然,MVVM还有其他方面(INotifyPropertyChanged等),我鼓励您学习更多,但这超出了原始问题的范围。