我刚刚开始使用Xamarin.Forms并且我找不到任何文档来指定我如何操作像代码中的Label中的文本。我只有一个带有Label,加号按钮和减号按钮的应用程序。加上应该增加标签中的值,减去应该相反。
我的观点在XAML中定义。当我看https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/时,我真的找不到与此相符的东西。我想我应该创建一个代表数字的“NumberViewModel”,然后使用一些PropertyChanged-isch系统将数据绑定到视图。
如果这是Android,那么我将在xml中定义我的按钮,其中包含将处理按钮单击的方法的预期名称(我在Xamarin.Forms中也这样做)。然后单击按钮,然后触发代码中的方法,在触发的方法中,我可能会通过调用findViewById(....)来检索我想要操作的对象。
我将调整为Xamarin.Forms但是它会很好用一个简单的指南,只显示如何将字符串绑定到标签,没有数百行代码。请告诉我,我只是在谷歌搜索不好,因为我花了很多时间试图解决这个问题。
答案 0 :(得分:4)
你可以在这里找到两种方法:更容易,但更丑陋,更复杂,但更漂亮。
直接编辑
背后的代码(更容易,但由于高耦合而更加丑陋)
假设我们有以下XAML:
<StackLayout Orientation="Vertical">
<Label x:Name="lblOutput" Text="[output]" />
<StackLayout Orientation="Horizontal">
<Button x:Name="btnAdd" Text="+" />
<Button x:Name="btnMinus" Text="-" />
</StackLayout>
</StackLayout>
您可以直接在后面的代码中引用UI,如此(简化):
int currentValue = 0;
lblOutput.Text = currentValue.ToString ();
btnAdd.Clicked += delegate {
currentValue++;
lblOutput.Text = currentValue.ToString ();
};
btnMinus.Clicked += delegate {
currentValue--;
lblOutput.Text = currentValue.ToString ();
};
这里的诀窍是使用x:Name
,允许您直接使用后面代码中的元素。
使用MVVM方法
(更复杂,但更灵活)
创建一个新类(您的ViewModel)并实现INotifyPropertyChanged
接口。将该类绑定到后面的XAML代码中的视图,如下所示:
this.BindingContext = new ViewModel ();
现在我们可以像这样使用XAML:
<StackLayout Orientation="Vertical">
<Label Text="{Binding CurrentValue}" />
<StackLayout Orientation="Horizontal">
<Button Text="+" Command="{Binding AddCommand}" />
<Button Text="-" Command="{Binding MinusCommand}" />
</StackLayout>
</StackLayout>
并且ViewModel看起来像这样:
public ICommand AddCommand { get; private set; }
public ICommand MinusCommand { get; private set; }
public ViewModel ()
{
AddCommand = new Command (() => {
CurrentValue = CurrentValue+1;
});
MinusCommand = new Command (() => {
CurrentValue = CurrentValue-1;
});
}
public int CurrentValue { get; set; } // You'll need to handle the PropertyChanged events here
我希望这有帮助!