Xamarin数据绑定

时间:2017-05-05 18:59:22

标签: c# xaml xamarin data-binding

如果我不是白痴,我真的无法解决,我要做的就是这么简单!

我有一个带有公共用户名字段的ViewModel。

最初我试图让Entry显示一个初始值但是在进一步观察后我发现我甚至无法获得更新视图模型的视图。

当我点击按钮并在警报中显示时,我希望文本反映输入的用户名。

我的ViewModel:

public class LoginViewModel
{
    public String Username { get; set; }
    public String Password { get; set; }
    public int UserId { get; set; }
}

我的页面:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage Padding="15,15,15,15" 
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="EngineerApp.LoginPage">
<AbsoluteLayout>
<StackLayout VerticalOptions="EndAndExpand" Orientation="Vertical">
    <Image Source="traklogo.png" VerticalOptions="FillAndExpand"></Image>
    <Label TextColor="#207cad" Text="Username" />
    <Label Text="{Binding Username}"></Label>
    <Entry Text="{Binding Username, Mode=TwoWay}" TextColor="Black" Placeholder="Please enter your username..." x:Name="txtUsername" />
</StackLayout>
</AbsoluteLayout>
</ContentPage>

我的网页代码:

public partial class LoginPage : ContentPage
{

    public LoginViewModel viewModel = new LoginViewModel();

    public LoginPage()
    {
        InitializeComponent();
        BindingContext = viewModel;

        btnLogIn.Clicked += delegate
        {
            DisplayAlert("Test",viewModel.Username,"Okay");
            return;

        };

    }
}

2 个答案:

答案 0 :(得分:0)

来自实现INotifyPropertyChanged的LoginViewModel的这个工作片段位于商店中发布的应用中:

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public string Username
    {
        get { return username; }
        set
        {
            if (username == value) return;
            username = value?.ToLowerInvariant();
            OnPropertyChanged();
        }
    }

关联的Entry XAML代码段

          <Entry x:Name="UsernameEntry" HeightRequest="45" Keyboard="Email"
                Placeholder="{Binding LabelUsername}" Text="{Binding Username}">

答案 1 :(得分:0)

我已经解决了。此页面之前的页面传递了它自己的BindingContext。删除此解决了我的问题。