設定 BindingContext 后,即使所需引數不正確,IsValid 也會將 IsLastnameValid 和 IsFirstnameValid 設定為 true。我不明白為什么。
郵政編碼
<StackLayout>
<Entry Placeholder="Lastname" Text="{Binding Lastname}">
<Entry.Behaviors>
<xct:TextValidationBehavior MinimumLength="3" MaximumLength="10"
IsValid="{Binding IsLastnameValid}"/>
</Entry.Behaviors>
</Entry>
<Entry Placeholder="Firstname" Text="{Binding Firstname}">
<Entry.Behaviors>
<xct:TextValidationBehavior MinimumLength="3" MaximumLength="10"
IsValid="{Binding IsFirstnameValid}"/>
</Entry.Behaviors>
</Entry>
<Button Text="Save" Clicked="OnSave">
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource BooleanAndConverter}">
<Binding Path="IsLastnameValid"/>
<Binding Path="IsFirstnameValid"/>
</MultiBinding>
</Button.IsEnabled>
</Button>
</StackLayout>
客戶服務代碼
public partial class MainPage : ContentPage
{
private UserViewModel _userViewModel;
public MainPage()
{
InitializeComponent();
_userViewModel = new UserViewModel(false, false);
BindingContext = _userViewModel;
}
private void OnSave(object sender, EventArgs e)
{
Console.WriteLine("[User View Model Firstname] : " _userViewModel.Firstname " " _userViewModel.IsFirstnameValid);
Console.WriteLine("[User View Model Lastname] : " _userViewModel.Lastname " " _userViewModel.IsLastnameValid);
}
}
ViewModel 代碼 我正在使用 Nuget 包 PropertyChanged.Fody
[AddINotifyPropertyChangedInterface]
public class UserViewModel
{
public UserViewModel(bool isLastnameValid, bool isFirstnameValid)
{
IsLastnameValid = isLastnameValid;
IsFirstnameValid = isFirstnameValid;
}
public string Lastname { get; set; }
public string Firstname { get; set; }
public bool IsLastnameValid { get; set; }
public bool IsFirstnameValid { get; set; }
}
謝謝你的幫助 :)
編輯以顯示轉換器代碼
public class BooleanAndConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Any(value => value == null))
{
return false;
}
var result = values.OfType<IConvertible>().All(System.Convert.ToBoolean);
return result;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException("BooleanAndConverter is a OneWay converter.");
}
}
uj5u.com熱心網友回復:
這段代碼在我的測驗倉庫中作業(見我上面評論中的鏈接):
<Entry Placeholder="Lastname" Text="{Binding Lastname}">
<Entry.Behaviors>
<xct:TextValidationBehavior MinimumLength="3" MaximumLength="10"
Flags="ValidateOnAttaching, ValidateOnValueChanging" IsValid="{Binding IsLastnameValid}"/>
</Entry.Behaviors>
</Entry>
與您的唯一變化是添加了屬性
Flags="ValidateOnAttaching, ValidateOnValueChanging"
鑒于此,按“保存”按鈕會導致除錯輸出為“false” IsValid。
編輯:如果您手動設定標志,則默認標志不適用。所以需要列出所有需要的標志。我已經更改了上面的代碼片段。
請參閱ValidationFlags 列舉。
您可能還想包括, ValidateOnUnfocusing. 這將在用戶離開該控制元件時再次檢查(例如,單擊另一個控制元件)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386819.html
標籤:C# 沙马林 xamarin.forms
