MVVM Cross local: MvxBind пусто - PullRequest
       16

MVVM Cross local: MvxBind пусто

0 голосов
/ 30 марта 2020

Важное примечание: раньше он работал на MVVM Cross V3.5, но после обновления до V6.4.2 он перестал работать.

В проекте, который широко использует MVVM Cross, существует настраиваемое представление текста ,

    <custom.HeaderTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marg_top"
        android:layout_marginBottom="@dimen/marg_top"
        android:gravity="center"
        local:MvxBind="Text SearchCriteria"
        android:layout_gravity="center_horizontal"
        android:textAllCaps="true" />

local:MvxBind="Text SearchCriteria" указывает на модель представления, которая действительно возвращает текст:

public string SearchCriteria => Resource.SearchCriteria;

И строка существует в ресурсах:

    public static string SearchCriteria {
        get {
            return ResourceManager.GetString("SearchCriteria", resourceCulture);
        }
    }

По какой-то причине он всегда отображается на экране пустым при запуске. Если я заменю текстовое поле стандартным android и использую стандартное назначение, появится текст.

android:text="@string/test_string"

Итак, я знаю, что текстовое поле есть, оно на экране и ничто не блокирует его, просто текстовое значение по какой-то причине не устанавливается или не отображается (не знаю, какой именно). Можете ли вы посоветовать, в чем проблема? Если вам нужна дополнительная информация, просто спросите. Спасибо.

Обновление

Я добавил точку останова для установщика / получателя для связанного значения:

    public string SearchCriteria
    {
        get => searchCriteria; // Does not get called
        set => SetProperty(ref searchCriteria, value); // Is called with an actual value
    }

И срабатывает только установщик ( со значением) метод получения никогда не запускается.

Обновление Для дальнейшего контекста мы попытались установить текст непосредственно на кнопке в представлении, используя средство получения текста ViewModel, и это работает. Так что в привязке XML есть какая-то проблема, которую мы не понимаем.

Button = view.FindViewById<Button>(Resource.Id.Button);
Button.Text = ViewModel.SearchCriteria

Мы также убедились, что expality связывает модель представления и представление:

ClaimsHistorySearchViewFragment_ : MvxFragment<ClaimsHistorySearchViewModel>

Обновление Мы обнаружили больше проблем с моделью представления. Когда мы присваиваем значение ProptertyChange, а explicity изменили значение, PropertyChanged не сработало:

 public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            base.OnViewCreated(view, savedInstanceState);
            ViewModel.PropertyChanged += _model_PropertyChanged;
            ViewModel.ErrorCode = 0; // _model_PropertyChanged Does NOT fire
        }

Примечание Привязка работает, когда мы используем свободную перекрестную привязку mvvm, но не когда мы использовать привязку localmvx

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

В моем импорте был пробел

xmlns:local="http://schemas.android.com/apk/res-auto

Как только я удалил его, он был исправлен

0 голосов
/ 31 марта 2020

Если вы наследуете от TextView, вы можете попробовать зарегистрировать привязку на вашем Setup> FillTargetFactories, используя то же целевое связывание , которое использует TextView:

registry.RegisterCustomBindingFactory<HeaderTextView>(
                "Text",
                textView => new MvxTextViewTextTargetBinding(textView));

Е.И.В.

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