2017-02-20 1 views
0

Я написал несколько команд для моего интерфейса в моей модели просмотра для моего проекта Xamarin Forms. Мне нужно получить доступ к этим командам на моих кнопках, чтобы они выполняли задачу, но я не уверен, как это сделать.Как мне получить доступ к моим командам viewmodel на кнопке Xamarin Forms?

Мои ViewModel

TheDemo/ViewModel/MenupageViewModel.cs

using System; 
using System.Windows.Input; 
using Xamarin.Forms; 

namespace TheDemo 
{ 
    public class MenuPageViewModel 
    { 
     public ICommand GoDashboardCommand { get; set; } 
     public ICommand GoRequirementsCommand { get; set; } 
     public ICommand GoFixturesCommand { get; set; } 
     public ICommand GoVesselsCommand { get; set; } 
     public ICommand GoDutyBrokerCommand { get; set; } 
     public ICommand GoSettingsCommand { get; set; } 
     public ICommand GoInfoCommand { get; set; } 

     public MenuPageViewModel() 
     { 
      GoDashboardCommand = new Command(GoDashboard); 
      GoRequirementsCommand = new Command(GoRequirements); 
      GoFixturesCommand = new Command(GoFixtures); 
      GoVesselsCommand = new Command(GoVessels); 
      GoDutyBrokerCommand = new Command(GoBroker); 
      GoSettingsCommand = new Command(GoSettings); 
      GoInfoCommand = new Command(GoInfo); 
     } 

     void GoDashboard(object obj) { 
      App.NavigationPage.Navigation.PopToRootAsync(); 
      App.MenuIsPresented = false; 
     } 
     void GoRequirements(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Requirements()); 
      App.MenuIsPresented = false; 
     } 
     void GoFixtures(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Fixtures()); 
      App.MenuIsPresented = false; 
     } 
     void GoVessels(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Vessels()); 
      App.MenuIsPresented = false; 
     } 
     void GoBroker(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Duty()); 
      App.MenuIsPresented = false; 
     } 
     void GoSettings(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Settings()); 
      App.MenuIsPresented = false; 
     } 
     void GoInfo(object obj) { 
      App.NavigationPage.Navigation.PushAsync(new Information()); 
      App.MenuIsPresented = false; 
     } 
    } 
} 

Меню TheDemo/Menupage.cs

using System; 
using System.Collections.Generic; 
using OxyPlot; 
using OxyPlot.Axes; 

using OxyPlot.Series; 
using OxyPlot.Xamarin.Forms; 
using System.Windows.Input; 
using Xamarin.Forms; 
namespace TheDemo 
{ 
    public partial class MenuPage : ContentPage 
    { 
     public MenuPage() 
     { 
      InitializeComponent(); 
      BindingContext = new MenuPageViewModel(); 

      Grid grid = new Grid(); 

      grid.Children.Add(
         new Button { 
          Text = "Requirements", 
          BackgroundColor = Color.Orange, 
          TextColor = Color.White, 
          Command = //How do I access my commands in my viewmmodel? 
         }, 0, 1); 

     } 
    } 
} 

ответ

0

Вы должны установить свой Button в переменной и затем свяжите его через SetBinding.

Пример кода:

var ButtonHolder = new Button { 
         Text = "Requirements", 
         BackgroundColor = Color.Orange, 
         TextColor = Color.White 
        }; 

ButtonHolder.SetBinding (Button.CommandProperty, "GoDashboardCommand"); 


grid.Children.Add(ButtonHolder, 0, 1); 
0

Прежде всего, отображают модель представления к представлению. Для этого добавьте следующую строку в тег ContentPage вашего представления в XAML, как это.

Линия добавить

xmlns:viewModels="clr-namespace:TheDemo.ViewModels; assembly=TheDemo" 

Пример

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:viewModels="clr-namespace:TheDemo.ViewModels; assembly=TheDemo"> 

Затем добавьте этот фрагмент кода внутри страницы содержимого тега

<ContentPage.BindingContext> 
     <viewModels:MenuPageViewModel/> 
    </ContentPage.BindingContext> 

Затем добавить кнопку и использовать свойство командной строки, как это

<Button Command="{Binding GoInfoCommand}"/> 

Обновите сборку и пространство имен в соответствии с вашим приложением. Надеюсь, это решило вашу проблему.

Смежные вопросы