У меня возникли проблемы с обновлением списка горизонтальных списков сырых баров на новый v3 MvvmCross. Кажется, что все работает правильно, за исключением того, что в конструкторе моего элемента управления BindableHorizontalListView элемент ItemsSource имеет значение NULL. Что странно, потому что контекст показывает, что свойство view-model, которое я пытаюсь связать, показывает очень четко, что есть 3 элемента, и привязка кажется очень простой. Что мне не хватает? Надеюсь, я включил достаточно кода. Я также попытался связать его с помощью быстрых привязок в событии «OnViewModelSet» с тем же результатом.ItemsSource пуст в конструкторе Custom Bound Horizontal ScrollView
Предупреждение представил
[MvxBind] 24.87 Unable to bind: source property source not found Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on DeviceViewModel
AXML
<BindableHorizontalListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource DevicesList; ItemClick ItemSelected"
local:MvxItemTemplate="@layout/devices_horizontal_list_item" />
управления BindableHorizontalListView
using System.Collections;
using System.Windows.Input;
using Android.Content;
using Android.Util;
using Cirrious.MvvmCross.Binding.Attributes;
using Cirrious.MvvmCross.Binding.Droid.Views;
namespace Project.Droid.Controls
{
public class BindableHorizontalListView
: HorizontalListView //Which inherits from AdapterView<BaseAdapter>
{
public BindableHorizontalListView(Context context, IAttributeSet attrs)
: this(context, attrs, new MvxAdapter(context))
{
}
public BindableHorizontalListView(Context context, IAttributeSet attrs, MvxAdapter adapter)
: base(context, attrs)
{
InitView();
var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId (context, attrs);
adapter.ItemTemplateId = itemTemplateId;
Adapter = adapter;
SetupItemClickListener();
}
public new MvxAdapter Adapter
{
get { return base.Adapter as MvxAdapter; }
set
{
var existing = Adapter;
if (existing == value)
return;
if (existing != null && value != null)
{
value.ItemsSource = existing.ItemsSource;
value.ItemTemplateId = existing.ItemTemplateId;
}
base.Adapter = value;
}
}
[MvxSetToNullAfterBinding]
public IEnumerable ItemsSource
{
get { return Adapter.ItemsSource; }
set { Adapter.ItemsSource = value; this.Reset(); }
}
public int ItemTemplateId
{
get { return Adapter.ItemTemplateId; }
set { Adapter.ItemTemplateId = value; }
}
public new ICommand ItemClick { get; set; }
private void SetupItemClickListener()
{
base.ItemClick += (sender, args) =>
{
if (null == ItemClick)
return;
var item = Adapter.GetItem(args.Position) as Java.Lang.Object;
if (item == null)
return;
if (item == null)
return;
if (!ItemClick.CanExecute(item))
return;
ItemClick.Execute(item);
};
}
}
}
Посмотреть
[Activity (Label = "Device", ScreenOrientation = ScreenOrientation.Portrait)]
public class DeviceView : MvxActivity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.device);
}
}
собственности на ViewModel
private Services.Device[] _devicesList;
public Services.Device[] DevicesList {
get {
return _devicesList;
}
set {
_devicesList = value;
RaisePropertyChanged(() => DevicesList);
}
}
Если только там была PCL поддержка в XAM STUDIO я бы просто шаг и посмотреть, как другие элементы управления делают это !!!!
Благодарим за помощь! Добавлен код DeviceList на вопрос, и для меня это выглядит просто, но я новичок во всем этом волшебстве MVVM. –
Это не «волшебство» - это код и нормальное развитие. Я рекомендую вам сначала запустить его с обычным списком - просто переключитесь, перестройте все и заставьте его работать со стандартным списком, затем переключитесь на горизонтальный список и отлаживайте его. – Stuart
Я связал множество списков и только что закончил писать одно и то же приложение на iPhone. Я уверен, что это глупая ошибка, я расскажу миру, когда найду ее. Спасибо за помощь. Полезно знать об ошибке, теперь, если бы я мог самостоятельно построить mvvmCross PCL на Xam.Studio, это было бы здорово. –