Поделиться через


BindableObjectExtensions.SetBinding Метод

Определение

Перегрузки

SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String)

Создает и применяет привязку к свойству.

SetBinding<TSource,TProperty>(BindableObject, BindableProperty, Func<TSource,TProperty>, BindingMode, IValueConverter, Object, String, Object, Object, Object)

Создает привязку между свойством исходного объекта и свойством целевого объекта.

SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String)

Исходный код:
BindableObjectExtensions.cs
Исходный код:
BindableObjectExtensions.cs

Создает и применяет привязку к свойству.

public static void SetBinding (this Microsoft.Maui.Controls.BindableObject self, Microsoft.Maui.Controls.BindableProperty targetProperty, string path, Microsoft.Maui.Controls.BindingMode mode = Microsoft.Maui.Controls.BindingMode.Default, Microsoft.Maui.Controls.IValueConverter converter = default, string stringFormat = default);
static member SetBinding : Microsoft.Maui.Controls.BindableObject * Microsoft.Maui.Controls.BindableProperty * string * Microsoft.Maui.Controls.BindingMode * Microsoft.Maui.Controls.IValueConverter * string -> unit
<Extension()>
Public Sub SetBinding (self As BindableObject, targetProperty As BindableProperty, path As String, Optional mode As BindingMode = Microsoft.Maui.Controls.BindingMode.Default, Optional converter As IValueConverter = Nothing, Optional stringFormat As String = Nothing)

Параметры

targetProperty
BindableProperty

Свойство BindableProperty, для которого необходимо задать привязку.

path
String

Строка String, содержащая путь к свойству, к которому устанавливается привязка.

mode
BindingMode

BindingMode для привязки. Это необязательный параметр. По умолчанию — Default.

converter
IValueConverter

IValueConverter для привязки. Это необязательный параметр. По умолчанию — null.

stringFormat
String

Строка, используемая как stringFormat для привязки. Это необязательный параметр. По умолчанию — null.

Комментарии

В следующем примере показано, как использовать метод расширения для задания привязки.

public class PersonViewModel
{
    public string Name { get; set; }
    public string Company { get; set; }
}

// ...

var vm = new PersonViewModel {
    Name = "John Doe", 
    Company = "Xamarin"
}

var label = new Label ();
label.SetBinding (Label.TextProperty, "Name"); // "Name" is the property on the view model
label.BindingContext = vm;

Debug.WriteLine (label.Text); // prints "John Doe"

Применяется к

SetBinding<TSource,TProperty>(BindableObject, BindableProperty, Func<TSource,TProperty>, BindingMode, IValueConverter, Object, String, Object, Object, Object)

Исходный код:
BindableObjectExtensions.cs

Создает привязку между свойством исходного объекта и свойством целевого объекта.

public static void SetBinding<TSource,TProperty> (this Microsoft.Maui.Controls.BindableObject self, Microsoft.Maui.Controls.BindableProperty targetProperty, Func<TSource,TProperty> getter, Microsoft.Maui.Controls.BindingMode mode = Microsoft.Maui.Controls.BindingMode.Default, Microsoft.Maui.Controls.IValueConverter? converter = default, object? converterParameter = default, string? stringFormat = default, object? source = default, object? fallbackValue = default, object? targetNullValue = default);
static member SetBinding : Microsoft.Maui.Controls.BindableObject * Microsoft.Maui.Controls.BindableProperty * Func<'Source, 'Property> * Microsoft.Maui.Controls.BindingMode * Microsoft.Maui.Controls.IValueConverter * obj * string * obj * obj * obj -> unit
<Extension()>
Public Sub SetBinding(Of TSource, TProperty) (self As BindableObject, targetProperty As BindableProperty, getter As Func(Of TSource, TProperty), Optional mode As BindingMode = Microsoft.Maui.Controls.BindingMode.Default, Optional converter As IValueConverter = Nothing, Optional converterParameter As Object = Nothing, Optional stringFormat As String = Nothing, Optional source As Object = Nothing, Optional fallbackValue As Object = Nothing, Optional targetNullValue As Object = Nothing)

Параметры типа

TSource

Тип источника данных.

TProperty

Тип свойства.

Параметры

targetProperty
BindableProperty

Значение BindableProperty , для которого необходимо задать привязку.

getter
Func<TSource,TProperty>

Метод getter, используемый для получения исходного свойства.

mode
BindingMode

Режим привязки. Это необязательное свойство. По умолчанию — Default.

converter
IValueConverter

Преобразователь. Это необязательный параметр. По умолчанию — null.

converterParameter
Object

Определяемый пользователем параметр для передачи преобразователю. Это необязательный параметр. По умолчанию — null.

stringFormat
String

Формат строки. Это необязательный параметр. По умолчанию — null.

source
Object

Объект, используемый в качестве источника для этой привязки. Это необязательный параметр. По умолчанию — null.

fallbackValue
Object

Значение, используемое вместо значения по умолчанию для свойства, если указанное значение не существует.

targetNullValue
Object

Значение, которое необходимо указать для связанного свойства, если целевой объект привязки .null

Исключения

Комментарии

В следующем примере показан параметр привязки с помощью метода расширения.

public class PersonViewModel
{
    public string Name { get; set; }
    public Address? Address { get; set; }
    // ...
}

var vm = new PersonViewModel { Name = "John Doe" };

var label = new Label();
label.SetBinding(Label.TextProperty, static (PersonViewModel vm) => vm.Name);
label.BindingContext = vm;

vm.Name = "Jane Doe";
Debug.WriteLine(label.Text); // prints "Jane Doe"

Не все методы можно использовать для определения привязки. Выражение должно быть простым выражением доступа к свойствам. Ниже приведены примеры допустимых и недопустимых выражений:

// Valid: Property access
static (PersonViewModel vm) => vm.Name;
static (PersonViewModel vm) => vm.Address?.Street;

// Valid: Array and indexer access
static (PersonViewModel vm) => vm.PhoneNumbers[0];
static (PersonViewModel vm) => vm.Config["Font"];

// Valid: Casts
static (Label label) => (label.BindingContext as PersonViewModel).Name;
static (Label label) => ((PersonViewModel)label.BindingContext).Name;

// Invalid: Method calls
static (PersonViewModel vm) => vm.GetAddress();
static (PersonViewModel vm) => vm.Address?.ToString();

// Invalid: Complex expressions
static (PersonViewModel vm) => vm.Address?.Street + " " + vm.Address?.City;
static (PersonViewModel vm) => $"Name: {vm.Name}";

Применяется к