【问题标题】:How can I access a property from a ViewModel to a ButtonClickEvent which is inside the CodeBehind of Xaml View?如何从 ViewModel 访问 Xaml View 的 CodeBehind 内的 ButtonClickEvent 的属性?
【发布时间】:2019-06-02 22:45:01
【问题描述】:

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

Please Click Here to View the Screenshot of my Xaml code

Click Here for the Properties code

我已将“EntryText”属性绑定到条目字段,并将“LblText”属性绑定到标签。所以,现在我只想在按钮单击事件上将 Entry 的值传递给 Label。

【问题讨论】:

  • 您有正确的想法,只需将您的标签绑定到 text 属性,然后单击按钮将 LblText 的值设置为条目的值。您可以将 LblText 默认值设置为“输入您的姓名”作为初始大小写。
  • 抱歉,我刚收到您的问题,您可以将命令绑定到您的按钮单击事件。您可以将命令放在您的视图模型中并在那里访问您的其他属性。
  • 我可以通过将命令绑定到按钮单击来实现结果。但我只想知道是否有任何方法可以使用按钮单击事件来实现相同的结果。我的意思是,有什么方法可以访问 ButtonClickEvent 中的 LblText 属性和 EntryText 属性?

标签: xaml xamarin xamarin.forms


【解决方案1】:

您在正确的轨道上,只需要稍微不同的搜索。 有多种方法可以做到这一点。我会告诉你最简单的方法,因为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】:

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

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

    在代码隐藏中

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

    在视图模型中

    
    public void ChangeLabelText() {
    
       LblText = EntryText;
    
    }
    
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多