Xamarin привязать к атрибуту свойств - PullRequest
0 голосов
/ 08 апреля 2020

Итак, у меня есть модель представления со свойством, подобным следующему, с обязательным атрибутом:

[Required]
public string Prop1 {get; set;}

Я пытаюсь установить набор привязок, подобный следующему, который проверяет, имеет ли свойство обязательный атрибут.

<Entry x:Name="Prop1" BorderColor="{Somehow know if property has the required attribute}"  Text="{Binding Prop1, Mode=TwoWay}"/>

Чтобы было ясно, мне нужно иметь доступ к этому из Xaml

Надеюсь, это имеет смысл. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 08 апреля 2020

Создайте другое свойство в вашей модели и используйте это свойство, чтобы проверить, имеет ли указанное свойство c атрибут.

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        this.BindingContext = new myViewModel();
    }
}

class myViewModel : INotifyPropertyChanged
{
    bool _isRequired;

    public event PropertyChangedEventHandler PropertyChanged;

    public string Prop1 { get; set; }

    public myViewModel()
    {
        checkIfRequired();
    }

    public void checkIfRequired() {

        var t = typeof(myViewModel);
        var pi = t.GetProperty("Prop1");
        bool hasIsIdentity = Attribute.IsDefined(pi, typeof(RequiredAttribute));

        isRequired = hasIsIdentity;
    }

    public bool isRequired
    {
        set
        {
            if (_isRequired != value)
            {
                _isRequired = value;

                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("isRequired"));
                }
            }
        }
        get
        {
            return _isRequired;
        }
    }
}

В xaml:

<Entry x:Name="Prop1" IsEnabled="{Binding isRequired}"  Text="{Binding Prop1, Mode=TwoWay}"/>

Возможно, вам потребуется используйте конвертер, если вам нужно привязать к BorderColor.

Обновление :

public myViewModel()
{
    checkIfRequired(nameof(Prop1));
}

public void checkIfRequired(string nameOfProeprty) {

    var t = typeof(myViewModel);
    var pi = t.GetProperty(nameOfProeprty);
    bool hasIsIdentity = Attribute.IsDefined(pi, typeof(RequiredAttribute));

    isRequired = hasIsIdentity;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...