Важное примечание: раньше он работал на 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