如何从ViewModel访问Xaml View的CodeBehind内部的ButtonClickEvent属性?

时间:2019-06-02 07:14:20

标签: xaml xamarin xamarin.forms

我想访问在ViewModel中创建的属性到文件后面的xaml代码。请查看随附的屏幕截图,以更好地理解我的问题。

Please Click Here to View the Screenshot of my Xaml code

Click Here for the Properties code

我已将“ EntryText”属性绑定到Entry字段,并将“ LblText”属性绑定到Label。因此,现在我只想在按钮单击事件中将Entry的值传输到Label。

3 个答案:

答案 0 :(得分:0)

您可以使用页面的BindingContext并将其强制转换为模型。然后,从那里访问属性。

var myModel = this.BindingContext as MainPageProperties;
if(myModel!=null)
{
    //Access your property here!
    var text = myModel.LblText;
}

答案 1 :(得分:0)

您处在正确的轨道上,只需要略有不同的搜索即可。 有多种方法可以做到这一点。我将告诉您最简单的方法,因为Xamarin Official Docs中也建议这样做。因此您的Xaml代码将如下所示

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ButtonDemos.BasicButtonClickPage"
             Title="Basic Button Click">
    <StackLayout>
        <Label x:Name="label"
               Text="Click the Button below"
               FontSize="Large"
               VerticalOptions="CenterAndExpand"
               HorizontalOptions="Center" />
        <Button Text="Click to Rotate Text!"
                VerticalOptions="CenterAndExpand"
                HorizontalOptions="Center"
                Clicked="OnButtonClicked" />
    </StackLayout>
</ContentPage>

您的C#文件将如下所示

public partial class BasicButtonClickPage : ContentPage
{
    public BasicButtonClickPage ()
    {
        InitializeComponent ();
    }

    async void OnButtonClicked(object sender, EventArgs args)
    {
        await label.RelRotateTo(360, 1000);
    }
}

答案 2 :(得分:0)

您可以使用代码隐藏在视图模型中调用方法。因此,在该方法中,您可以更改LblText。请参考下面的代码。

<Button x:Name="btn1" Clicked="btnClicked" />

隐藏在代码中

private void btnClicked(object sender, EventArgs e){

   _viewModel.ChangeLabelText();

}

在视图模型中


public void ChangeLabelText() {

   LblText = EntryText;

}