Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定工具栏项在Xamarin.Forms中单击_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 绑定工具栏项在Xamarin.Forms中单击

C# 绑定工具栏项在Xamarin.Forms中单击,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在尝试使用Xamarin.Forms构建我的第一个简单应用程序 在这个应用程序中,我有一个带有ListView和工具栏的ContentPage(位于NavigationPage内) 工具栏上有一个工具栏项,单击该项时应运行一个方法。即使我搜索过谷歌瘦,我还是无法让它工作 谁能告诉我我错过了什么 XAML: 代码隐藏: //... public partial class SetsPage : ContentPage { ObservableCollection&l

我正在尝试使用Xamarin.Forms构建我的第一个简单应用程序

在这个应用程序中,我有一个带有ListView和工具栏的ContentPage(位于NavigationPage内)

工具栏上有一个工具栏项,单击该项时应运行一个方法。即使我搜索过谷歌瘦,我还是无法让它工作

谁能告诉我我错过了什么

XAML:


代码隐藏:

//...
public partial class SetsPage : ContentPage
    {
        ObservableCollection<CardSet> sets = new ObservableCollection<CardSet>();

        public Command CreateCommand { get; private set; }

        public SetsPage() {

            InitializeComponent();

            sets.Add(new CardSet{ Title = "Test 1" });
            sets.Add(new CardSet{ Title = "Test 2" });
            sets.Add(new CardSet{ Title = "Test 3" });

            CardSetView.ItemsSource = sets;

            this.CreateCommand = new Command(async (sender) =>
                {
                    Debug.WriteLine("Hello");
                });

        }
    }
//...
/。。。
公共部分类集合页:ContentPage
{
ObservableCollection集合=新的ObservableCollection();
公共命令CreateCommand{get;private set;}
公共网页(){
初始化组件();
添加(新卡片集{Title=“Test 1”});
添加(新卡片集{Title=“Test 2”});
添加(新卡片集{Title=“Test 3”});
CardSetView.ItemsSource=集合;
this.CreateCommand=新命令(异步(发送方)=>
{
Debug.WriteLine(“你好”);
});
}
}
//...
我试过:

  • 你在上面看到了什么
  • 仅通过C#创建工具栏和按钮(并向ToolbarItem构造函数添加
    async()=>{…}
    参数)
  • 常规ol'
    (对象发送方,System.EventArgs e)=>{…}
    事件侦听器(通过代码
    。单击+=

  • 我认为这是一个绑定上下文的问题。如果将该命令放入一个单独的类(理想情况下是ViewModel)中,并将其用作页面的绑定上下文,那么它应该可以正常工作

    public class MyVm {
        public MyVm() {
            this.CreateCommand = new Command((sender) =>
            {
                Debug.WriteLine("Hello");
            });
        }
    
        public ICommand CreateCommand { get; private set; }
    }
    
    ...
    
    public SetsPage() {
            var vm = new MyVm();
            this.BindingContext = vm;
    
            InitializeComponent();
    ...
    

    或者,您可以只设置this.BindingContext=this;这在我的测试中没有达到预期效果。你试过了吗?
    public class MyVm {
        public MyVm() {
            this.CreateCommand = new Command((sender) =>
            {
                Debug.WriteLine("Hello");
            });
        }
    
        public ICommand CreateCommand { get; private set; }
    }
    
    ...
    
    public SetsPage() {
            var vm = new MyVm();
            this.BindingContext = vm;
    
            InitializeComponent();
    ...