Xamarin表示双向绑定ActivityIndi​​cator

时间:2017-04-03 13:06:39

标签: c# xamarin mvvm data-binding xamarin.forms

我是Xamarin的新手,我正在使用ActivityIndi​​cator来表示应用正在下载数据的用户。问题是我正在使用MVVM模式,我需要从ViewModel设置值IsRunningIsVisible。我的观点很简单:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:HmtMobile"
         x:Class="HmtMobile.MainPage"
         Title="Přihlášení"
         >
<ScrollView>
    <StackLayout Margin="10" Spacing="15" VerticalOptions="Center">
        <ActivityIndicator x:Name="ActivityIndicator" Color="Green" IsRunning="{Binding IsBusy, Mode=TwoWay}" IsVisible="{Binding IsBusy, Mode=TwoWay}"/>
        <Entry Placeholder="Uživatelské jméno" Text="{Binding UserName}"></Entry>
        <Entry Placeholder="Heslo" Text="{Binding Password}" IsPassword="True"></Entry>
        <Button Text="Přihlášení" Command="{Binding LoginCommand}" BackgroundColor="#77D065" TextColor="White"></Button>
    </StackLayout>
</ScrollView>

在视图构造函数中,我正在分配BindingContext

public MainPage()
    {
        InitializeComponent();
        this.BindingContext = new CredentialViewModel(this);
    }

其他属性有效,因为当我想登录时,属性会返回实际的用户名和密码,但是twoway绑定不会。属性声明相同,所以我不明白为什么会发生这种情况。

 private string password;
public string Password
    {
        get { return password; }
        set { password = value; OnPropertyChanged(); }
    }
    private bool isBusy;

    public bool IsBusy
    {
        get { return isBusy; }
        set { isBusy = value; OnPropertyChanged(); }
    }

我使用的是简单的Login方法。

private async Task Login()
    {
        IsBusy = true;
        await Task.Delay(5000);
   }

ActivityIndicator没有出现。有谁知道为什么? OnPropertyCHanged以这种方式编码:

 public class Bindable
{
    public event PropertyChangedEventHandler PropertyChanged;

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

1 个答案:

答案 0 :(得分:0)

我根据Felix消息弄明白了。问题是在Bindable课程中我忘了添加:INotifyPropertyChanged