我是Xamarin的新手,我正在使用ActivityIndicator来表示应用正在下载数据的用户。问题是我正在使用MVVM模式,我需要从ViewModel设置值IsRunning
和IsVisible
。我的观点很简单:
<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));
}
}
答案 0 :(得分:0)
我根据Felix消息弄明白了。问题是在Bindable
课程中我忘了添加:INotifyPropertyChanged
。