Как показать значения в Picker, занимающем MVVM с Xamarin - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу связать ObservableCollection объекта Manufacturer и показать его свойство Name в средстве выбора, занимающем шаблон MVVM в Xamarin, но я не получаю результаты (Blank Picker)

screenshot

Этот Picker отображается в View FiltersSisquimView.xaml следующим образом

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             BindingContext="{Binding Main, Source={StaticResource Locator}}"
             x:Class="AppValora.Views.Sisquim.FiltrosSisquimView"
             Title="SISQUIM®">   

    <StackLayout
        Orientation="Vertical"
        BindingContext="{Binding Filtros}">

        <Picker Title="Seleccione Fabricante"               
                Margin="15,5,15,5"
                HorizontalOptions="FillAndExpand"
                ItemsSource="{Binding Fabricantes, Mode=TwoWay}"
                ItemDisplayBinding="{Binding Name}"
                SelectedItem="{Binding Name}">         
        </Picker>   

    </StackLayout>
</ContentPage>

Как отмечалось, StackLayout, содержащий Picker, объявляется в MainViewModel

* следующим образом1012 *

Затем в моем FiltersViewModel.CS я объявляю коллекцию Observable, которая будет иметь мой элемент управления Picker (в дополнение к его инициализации в конструкторе) и заполнена массивом, имеющим два свойства Id и Name

 public ObservableCollection<Fabricante> Fabricantes { get; set; }

 public FiltrosViewModel()
  {       
      Fabricantes = new ObservableCollection<Fabricante>();

      LoadFabricantes();
   }

  async void LoadFabricantes()
  {
            IsRunning = true;

            //CONSUMING API...

            var list = response.Fabricantes;
            Fabricantes = new ObservableCollection<Fabricante>(list);

            IsRunning = false;

  }

Как показать значения в средстве выбора, занимающем MVVM с Xamarin

Я хочу связать ObservableCollection объекта-производителя и показать его свойство Name в средстве выбора, занимающем шаблон MVVM в Xamarin, но яне получаются результаты (Blank Picker)

Этот инструмент выбора отображается в View FiltersSisquimView.xaml следующим образом

Как уже отмечалось, StackLayout, содержащий Picker, объявляется в MainViewModel

, затем в моем FiltersViewModel.CS я объявляю Observable Collection, которая будет иметь мой элемент управления Picker (в дополнение к его инициализации в конструкторе) и заполнен массивом, который имеет два свойства Id и Name

Как видите, я правильно заполняю наблюдаемую коллекцию "Fabricantes"

object

Но как я могу показать свойство Name в средстве выбора?Я новичок в работе с MVVM, и я имею в виду, что я корректно подгоняю ViewModel к основному (поскольку мои другие элементы управления работают). Как только пользователь выберет имя, могу ли я спасти идентификатор этого имени, какая-нибудь помощь для меня?

1 Ответ

0 голосов
/ 25 сентября 2018

Проблема в следующей строке:

Fabricantes = new ObservableCollection<Fabricante>(list);

Когда вы обновляете ObservableCollection, вы теряете фактическую привязку.Вам либо нужно установить BindingContext еще раз, но это не то, что вы хотели бы.Вместо этого очистите существующую коллекцию и снова заполните ее.Например, вот так:

var list = response.Fabricantes;

Fabricantes.Clear();

foreach (var item in list)
    Fabricantes.Add(item);
...