如何使用 Xamarin 在 Picker 占用 MVVM 中显示值

How to show values in Picker occupying MVVM with Xamarin

我想绑定制造商对象的 ObservableCollection 并在 Xamarin 中占用 MVVM 模式的选取器中显示其名称 属性,但我没有得到结果(空白选取器)

这个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>

如前所述,包含 Picker 的 StackLayout 在 MainViewModel 中声明如下

public FiltrosViewModel Filtros { get; set; }

然后在我的 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;

  }

如何用Xamarin在Picker占用MVVM中显示值

我想绑定制造商对象的 ObservableCollection 并在 Xamarin 中占用 MVVM 模式的选取器中显示其名称 属性,但我没有得到结果(空白选取器)

这个Picker在View中显示FiltersSisquimView.xaml如下

如前所述,包含 Picker 的 StackLayout 在 MainViewModel 中声明如下

然后在我的 FiltersViewModel.CS 中声明 Observable 集合,它将拥有我的 Picker 控件(除了在构造函数中初始化它)并填充一个具有两个 Id 和 Name 属性的数组

如您所见,我正在正确填充 Observable 集合 "Fabricantes"

但是如何在选择器中显示名称 属性?我是 MVVM 的新手,我记得我正确地将 ViewModel 适配到 Main(因为我的其他控件工作) 一旦用户选择了名称,我可以挽救该名称的ID,对我有帮助吗?

问题出在这一行:

Fabricantes = new ObservableCollection<Fabricante>(list);

当您新建一个 ObservableCollection 时,您将失去实际的绑定。您要么需要再次设置 BindingContext ,但这不是您想要的。相反,清除现有集合并重新填充它。例如,像这样:

var list = response.Fabricantes;

Fabricantes.Clear();

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