如何从 ViewModel 访问属性到 Xaml View 的代码隐藏中的 ButtonClickEvent



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

请点击这里查看我的Xaml代码的屏幕截图

单击此处获取属性代码

我已将"EntryText"属性绑定到Entry字段,将"LblText"属性绑定到Label。所以,现在我只想在按钮单击事件上将 Enter 的值转移到标签。

你走在正确的轨道上,只是需要稍微不同地搜索。有多种方法可以做到这一点。我会告诉你最简单的方法,因为 Xamarin 官方文档中也建议这样做。所以你的 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);
    }
}

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

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

在代码隐藏中

private void btnClicked(object sender, EventArgs e){
   _viewModel.ChangeLabelText();
}

在视图模型中


public void ChangeLabelText() {
   LblText = EntryText;
}

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

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

相关内容

最新更新