Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
De BindableObject tilläggen innehåller en serie tilläggsmetoder som stöder konfiguration av Bindings på en BindableObject.
Tilläggen erbjuder följande metoder:
Bind
Metoden Bind erbjuder ett antal överlagrade versioner som på olika sätt förenklar konfigurationen av en Binding. Mer information om möjligheterna med Binding i ett .NET MAUI program finns i dokumentationen Microsoft.
Example
Det finns ett antal överlagringar för Bind metoden.
Enkelriktad bindning
En enkelriktad bindning från en egenskap i en vymodell (RegistrationViewModel) med namnet RegistrationCode till Text-egenskapen hos en Label kan skapas på följande sätt:
new Entry()
.Bind(Label.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode)
Tvåvägsbindning
En tvåvägsbindning från en egenskap i en vymodell (RegistrationViewModel) med namnet RegistrationCode till egenskapen Text hos en Entry kan skapas på följande sätt:
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
setter: static (RegistrationViewModel vm, string code) => vm.RegistrationCode = code)
Exempel på komplexa (nästlade) bindningar
Med hjälp av klassen nedan ViewModel kan vi skapa en kapslad tvåvägsbindning direkt till ViewModel.NestedObject.Text:
new Entry().Bind(
Entry.TextProperty,
getter: static (ViewModel vm) => vm.NestedObject.Text,
setter: static (ViewModel vm, string text) => vm.NestedObject.Text = text);
class ViewModel
{
public NestedObject NestedObject { get; set; } = new();
public string Text { get; set; } = string.Empty;
}
class NestedObject
{
public string Text { get; set; } = string.Empty;
}
Kompilerade bindningar
BindingBase-bindningar stöder kompilerade bindningar som skapats med metoden BindingBase.Create . Den här metoden stöder kapslade, enkelriktade och dubbelriktade bindningar. Följande kod skapar till exempel en kapslad tvåvägsbindning till ViewModel.NestedObject.Text:
new Entry().Bind(
Entry.TextProperty,
BindingBase.Create(static (ViewModel vm) => vm.NestedObject.Text, BindingMode.TwoWay));
Standardegenskap
Metoden Bind kan anropas utan att ange den egenskap som bindningen ska konfigureras för. Detta använder standardvärdena som tillhandahålls av biblioteket med den fullständiga listan på lagringsplatsen GitHub.
Standardegenskapen som ska bindas för en Entry är textegenskapen. Exemplet ovan kan därför skrivas som:
new Entry().Bind(nameof(ViewModel.RegistrationCode))
Varning
Den här metoden innebär att Reflection används i viss utsträckning och kommer inte att prestera lika bra som metoden Explicit property.
Varning
Bindningar som den här som använder en string för parametern path: är inte trimsäkra
Värdekonvertering
Metoden Bind gör det möjligt för en utvecklare att ange Converter som de vill använda i bindningen eller helt enkelt tillhandahålla en mekanism för att använda en infogad konvertering.
Omvandlare
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
converter: new TextCaseConverter { Type = TextCaseType.Upper });
Se TextCaseConverter för dokumentationen om fullständig användning.
Direktkonvertering
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
convert: (string? text) => text?.ToUpperInvariant());
Flera bindningar
Flera bindningar kan aggregeras tillsammans med IMultiValueConverter.
Parametern convert är en Func som krävs för att konvertera flera bindningar till det obligatoriska resultatet.
new Label()
.Bind(Label.TextProperty,
binding1: BindingBase.Create((ViewModel vm) => vm.IsBusy),
binding2: BindingBase.Create((ViewModel vm) => vm.LabelText),
convert: ((bool IsBusy, string LabelText) values) => values.IsBusy ? string.Empty : values.LabelText)
RemoveTypedBinding
Metoden RemoveTypedBinding tar bort en typinskriven bindning från en BindableObject. För inskrivna bindningar som skapats med en setter (till exempel TwoWay eller OneWayToSource bindningar) använder du den här metoden i stället för RemoveBinding så att de hanterare som ansvarar för att skriva tillbaka värden till bindningskällan också kopplas från.
var entry = new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
setter: static (RegistrationViewModel vm, string code) => vm.RegistrationCode = code);
entry.RemoveTypedBinding(Entry.TextProperty);
BindCommand
Metoden BindCommand är ett användbart sätt att konfigurera en bindning till en standard som tillhandahålls av biblioteket med den fullständiga listan på lagringsplatsen GitHub.
Det kommando som binds som standard för en Button är egenskapen Command. I följande exempel konfigureras därför en bindning till den egenskapen.
new Button().BindCommand(static (ViewModel vm) => vm.SubmitCommand);
Ovanstående kan också skrivas som:
Note
Om standardkommandot inte resulterar i bindning till önskat kommando kan du använda Bind -metoden.
new Button()
.Bind(Entry.CommandProperty,
getter: static (RegistrationViewModel vm) => vm.SubmitCommand,
mode: BindingMode.OneTime);
En CommandParameter bindning kan också konfigureras genom att parameterGetter ange argumentet:
new Button().BindCommand(
static (ViewModel vm) => vm.SubmitCommand,
parameterGetter: static (ViewModel vm) => vm.RegistrationCode);
Note
När en parameterGetter tillhandahålls utan att parameterHandlersäven ange , en parameterSetter eller en explicit parameterBindingMode, CommandParameter standardbindningen till BindingMode.OneTime.
Gestkoppling
Gestbindningar gör att vi kan skapa en ClickGestureRecognizer, SwipeGestureRecognizer, TapGestureRecognizer, bifoga den till alla element som implementerar IGestureRecognizer och binder den till en ICommand i vår ViewModel.
BindClickGesture
I följande exempel visas hur du skapar en ClickGestureRecognizer som kräver 2 klick för att aktivera, koppla den till en Label och binda den till en ICommand egenskap med namnet ClickCommand i vår ViewModel:
new Label()
.BindClickGesture(
static (ViewModel vm) => vm.ClickCommand,
commandBindingMode: BindingMode.OneTime,
numberOfClicksRequired: 2));
BindSwipeGesture
I följande exempel visas hur du skapar en SwipeGestureRecognizer som kräver SwipeDirection.Up för dess SwipeDirection och ett minumum 200-poängsavstånd för dess Threshold, och sedan kopplar den till en Label och binder den till en ICommand egenskap som heter SwipeCommand i vår ViewModel:
new Label()
.BindSwipeGesture(
static (ViewModel vm) => vm.SwipeCommand,
commandBindingMode: BindingMode.OneTime,
direction: SwipeDirection.Up,
threshold: 200);
BindTapGesture
I följande exempel visas hur du skapar en ClickGestureRecognizer som kräver 2 tryckningar för att aktivera, koppla den till en Label och binda den till en ICommand egenskap som heter TapCommand i vår ViewModel:
new Label()
.BindTapGesture(
static (ViewModel vm) => vm.TapCommand,
commandBindingMode: BindingMode.OneTime,
numberOfTapsRequired: 2));
AppThemeBinding
Metoden AppThemeBinding gör det möjligt att tilldela ett ljust och ett mörkt värde till en BindableProperty, så att när programmets AppTheme ändras används det värde som är lämpligt för det temat.
I följande exempel tilldelas färgen svart till Text kontrollens Label egenskap om programmet körs i ljust tema och vitt i mörkt tema.
new Label().AppThemeBinding(Label.TextColorProperty, Colors.Black, Colors.White);
Note
Det finns en mer specifik metod när du hanterar Color egenskaper.
AppThemeColorBinding utför samma underliggande beteende som AppThemeBinding men kräver en uppsättning Color parametrar.
Mer information finns i dokumentationen för temahantering.
Exempel
Du hittar ett exempel på de här tilläggsmetoderna i praktiken i .NET MAUI Community Toolkit Sample Application.
API
Du hittar källkoden för BindableObject-tilläggsmetoderna på .NET MAUI Community Toolkit GitHub-lagringsplatsen.
.NET MAUI Community Toolkit