将选择器绑定到mvvm命令Xamarin表单

the*_*guy 6 binding command picker mvvm xamarin.forms

我一直在寻找尝试解决这个问题,我没有长时间使用Xamarin表格,但我认为这很容易.我试图将pickitem的picker绑定到视图模型中的命令,我使用的是FreshMVVM和Xamarin表单版本2.3.4.214-pre5,我能够绑定视图模型中的数据但是选择器中没有Command选项.

任何帮助,将不胜感激.谢谢

the*_*guy 14

我已经能够得到一个有效的解决方案:

首先,我安装了Xamarin Forms版本2.3.4.214-pre5,它运行得很好.然后在Xamarin论坛的帮助下,我获得了一个解决方案,如下所示:

1 - Behaviors.Forms通过Install-Package Behaviors.Forms在NuGet包管理器控制台中运行来安装NuGet包.

2 - 然后在XAML页面中包含以下命名空间:

<ContentPage xmlns:behaviors="clr-namespace:Behaviors;assembly=Behaviors">
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

3 - 然后Picker.BehaviorsPicker标记中添加属性:

<Picker x:Name="MyPicker"
          ItemsSource="{Binding IdentityProviders}"
          HorizontalOptions="FillAndExpand" Title="Identity Provider"
          Margin="10"
          ItemDisplayBinding="{Binding Description}">
    <Picker.Behaviors>
          <behaviors:EventHandlerBehavior EventName="SelectedIndexChanged">
              <behaviors:InvokeCommandAction Command="{Binding SelectedProviderChanged}" />
          </behaviors:EventHandlerBehavior>
    </Picker.Behaviors>
</Picker>
Run Code Online (Sandbox Code Playgroud)

如果要将数据作为参数传回,请在命令后包含以下内容 CommandParameter="{Reference MyPicker}"

这解决了我的问题,我希望这会有所帮助:我得到的帮助来自这篇帖子MVVM Light - 如何在viewModel中使用selectedIndexChanged事件

  • 那是一个很好的把戏。我相信它应该很容易移植到任何类型的控件中。感谢分享! (2认同)

Nic*_*ner 6

您需要做的就是监视视图模型中的 SelectedItem 属性。

        private ObservableRangeCollection<UserViewModel> _users = new ObservableRangeCollection<UserViewModel>();
        public ObservableRangeCollection<UserViewModel> Users
        {
            get => _users;
            set { _users = value; OnPropertyChanged(); }
        }

    private User _selectedUser;
        public UserModelView CurrentUser
        {
            get => _selectedUser;
            set { _selectedUser = value; 
                  //Do Some stuff with your new user(); 
                  OnPropertyChanged(); 
}
        }



<Picker WidthRequest="100" 
                ItemsSource="{Binding Users}"
                ItemDisplayBinding="{Binding Name}"
                SelectedItem="{Binding CurrentUser, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)


cva*_*eek -4

要在选择选择器项时运行代码,请指定SelectedIndexChanged选择器的属性:

<Picker x:Name="myPicker" SelectedIndexChanged="indexChanged"/>
Run Code Online (Sandbox Code Playgroud)

然后在后面的代码中添加您的indexChanged方法:

void indexChanged(object sender, EventArgs e) 
{
    //Your code here
}
Run Code Online (Sandbox Code Playgroud)

然后,当用户从选择器中选择不同的项目时,它将运行 indexChanged 方法。

  • 这可行,但我试图将其绑定到 mvvm 命令,在其中我在做出选择时更新模型。我需要将它绑定到命令。 (2认同)