XAML
<?xml version="1.0" enCoding="UTF-8"?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyApp.VIEw.CustomPage" title="Something"><ContentPage.Content> <StackLayout> <button x:name="numBtn" Text="Increase number" Command="{Binding IncreaseCommand}" /> <Label x:name="numLabel" Text="{Binding numberText}" /> </StackLayout></ContentPage.Content></ContentPage>
代码隐藏
public partial class CustomPage : ContentPage{ public CustomPage () { InitializeComponent (); BindingContext = viewmodelLocator.viewmodel(); //viewmodelLocator is singleton,gives //you a viewmodel instance }}
视图模型
public ICommand IncreaseCommand { get; private set; }private int number;public string numberText { get; private set;}
构造函数:
public viewmodel(){ IncreaseCommand = new Command (() => IncreaseExecuted ()); number = 0; numberText = number.ToString (); OnPropertyChanged (numberText);}
然后
private voID IncreaseExecuted(){ number++; numberText = number.ToString (); OnPropertyChanged (numberText);}
当我使用Xamarin AndroID Player(KitKat)运行应用程序时,我看到按钮,标签读数为0.然后我按下按钮,没有任何反应.我尝试检查断点会发生什么,但应用程序不会暂停,即使它们在我的viewmodel的构造函数中也没有.我想这与模拟器有关.无论如何,我认为绑定是好的,因为我可以在屏幕上看到“0”.可能是什么问题呢?让我展示我的viewmodelBase类以防万一:
viewmodelBase
public abstract class viewmodelBase : INotifyPropertyChanged{ public event PropertyChangedEventHandler PropertyChanged; protected virtual voID OnPropertyChanged(String propertyname) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyname)); } }}
当我调用OnPropertyChanged时,我的numberText属性可能没有更新?但我以前曾多次使用过完全相同的viewmodelBase类,但它总能正常工作.最后一件事,我的CustomPage页面被包装在一个NavigationPage中,它是TabbedPage的子节点:
MainPage.xaml.cs中
this.Children.Add (new NavigationPage (new CustomPage ()) {title="Something"} );
这不应该影响任何东西,但只是以防万一.那我的命令绑定有什么问题?先感谢您!
解决方法 你快到了.仔细查看对OnPropertyChanged方法的调用;您传递的是numberText的值,而不是名称.如果您更改代码以传递“numberText”,我希望它能够正常工作.编辑:我应该补充说,构造函数中的OnPropertyChanged调用具有相同的问题.您在启动时看到“0”的原因是视图只是使用现有绑定来检索值.
编辑2:现在Xamarin支持C#6.0,您可以使用新的“nameof”表达式,无需使用硬编码字符串.或者,您可以使用MvvmCross,Mvvmlight或XLabs的MVVM类.
总结以上是内存溢出为你收集整理的c# – Button命令绑定在Xamarin.Forms中不起作用全部内容,希望文章能够帮你解决c# – Button命令绑定在Xamarin.Forms中不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)