Xamarin View с ViewModel и поведением - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть представление, которое содержит профиль пользователя текущего пользователя.Представление содержит модель представления с двусторонней привязкой к отдельным атрибутам, таким как имя пользователя или адрес электронной почты.Представление также имеет поведение, которое проверяет ввод и показывает ошибку, ввод не является допустимым.Из-за двусторонней привязки viewmodel обновляет значение, даже если поведение говорит, что ввод неправильный.Мне нужно решить эту проблему.

Мой текущий подход заключается в использовании в качестве атрибута включения поведения в viewmodelТаким образом, я могу получить доступ к атрибутам поведения в установщике атрибутов в модели представления.Поэтому я не могу остановить обновление на неправильных входах.Но я не могу получить доступ к поведению из моей viewmodel в xaml представления.Это способ, которым я могу сделать это вообще?

Мой следующий подход должен был бы передать атрибут isValid поведения модели представления.Но здесь, опять же, я не знаю, как это сделать, возможно ли это вообще?

Последний подход - создать команду в модели представления, привязав ее к новой кнопке в профиле пользователя, используяодностороннее связывание и как-то передать входные данные из представления в команду и обновить userprofile.

Может быть, здесь кто-то, кто может мне помочь?

РЕДАКТИРОВАТЬ: Я отправляю некоторый код:

Это отдельная запись с моим поведением:

<Entry x:Name="phoneNumber" Text="{Binding TelephoneNum, Mode=TwoWay}">
    <Entry.Behaviors>
        <behaviors:TelNumBehavior x:Name="NumValidatorUser"/>
    </Entry.Behaviors>
</Entry>

TelNumBehavior:

public class TelNumBehavior : Behavior<Entry>
{
...
public static readonly BindablePropertyKey IsVisiblePropertyKey = 
        BindableProperty.CreateReadOnly("IsVisible", typeof(bool), typeof(TelNumBehavior), false);
public static readonly BindableProperty IsVisibleProperty = IsVisiblePropertyKey.BindableProperty;

...
public bool IsVisible
{
    get { return (bool) this.GetValue(IsVisibleProperty); }
    set
      {
          this.SetValue(IsVisiblePropertyKey, value);
       }
    }
...
(OnAttachedTo, OnDetachingFrom)
...

private void bindable_TextChanged(object sender, TextChangedEventArgs e)
{
    Entry entry = sender as Entry;
    this.IsVisible = (entry.Text == "")
            ? true
            : (Regex.IsMatch(e.NewTextValue, mobileRegex) || Regex.IsMatch(e.NewTextValue, fixedLineRegex));
    entry.TextColor = this.IsVisible ? Color.Default : Color.Red;
}

Подводя итог: я использую это поведение для проверки некоторых входных данных.Но модель представления не знает, верны ли входные данные или нет.И это в настоящее время моя проблема.Я не знаю, как сообщить модели представления о состоянии входных данных.

}
...