Xamarin.Forms使用MVVM更新Xamarin.Essentials.Contacts选择中的Entry值



我正在尝试使用Xamarin.Essentials.Contacts.更新Entry控件的值

我有一个打开页面时为空的PhoneNumber条目,但它下面有一个按钮,上面写着"选择联系人",我正在检索电话号码,并试图将PhoneNumber条目的值设置为该电话号码。

我似乎做不到,也不知道怎么做。

当我选择联系人时,我会得到号码,但它不会更新Entry值。

这是我的代码

XAML

<StackLayout Orientation="Horizontal"
Padding="16,12"
Spacing="12">
<Frame HorizontalOptions="FillAndExpand"
Padding="6, 1"
Margin="5, 0"
CornerRadius="8"
BackgroundColor="#212121">
<Entry x:Name="PhoneNumberEntry"
Text="{Binding PhoneNumberEntry, Mode=TwoWay}"
Placeholder="Don't add '+1'" 
Keyboard="Numeric"
MaxLength="10"
Style="{StaticResource EntryStyle}" />
</Frame>
</StackLayout>
<StackLayout Orientation="Horizontal"
Padding="16,12"
Spacing="12">
<Button x:Name="ContactButton"
Text="Or select contact"
Command="{Binding SelectContactCommand}"
BackgroundColor="Red"
HorizontalOptions="FillAndExpand" />
</StackLayout>

ViewModel

public class InviteViewModel : BaseViewModel
{
public InviteViewModel()
{
SelectContactCommand = new Command(async () => await ExecuteSelectContactCommand());
Info = new StringBuilder();
}
public string PhoneNumberEntry { get; set; }
public Command SelectContactCommand { get; set; }
public StringBuilder Info { get; set; }
private async Task ExecuteSelectContactCommand()
{
try
{
var contact = await Contacts.PickContactAsync();
if (contact == null)
{
return;
}
Info.AppendLine(contact.Phones.FirstOrDefault()?.PhoneNumber ?? string.Empty);
var phoneNumber = Info.ToString().Replace("(", "").Replace(")", "").Replace(" ", "").Replace("-", "").TrimEnd();
PhoneNumberEntry = phoneNumber;
}
catch (Exception ex)
{
}
}
}

就像@Jason和@AppPack所说的,这只是在PhoneNumberEntry的设置器中使用OnPropertyChanged()的问题

private string phoneNumberEntry;
public string PhoneNumberEntry
{
get { return phoneNumberEntry; }
set
{
phoneNumberEntry = value;
OnPropertyChanged("PhoneNumberEntry");
}
}

最新更新