首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在XAML中使用ContentPage.BindingContext来定义绑定上下文,那么如何在C#后端访问该上下文?

如果在XAML中使用ContentPage.BindingContext来定义绑定上下文,那么如何在C#后端访问该上下文?
EN

Stack Overflow用户
提问于 2018-08-13 08:33:04
回答 1查看 1.6K关注 0票数 1

在我的XAML中,我定义了这样的绑定上下文:

代码语言:javascript
复制
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
             xmlns:template="clr-namespace:Japanese.Templates" 
             xmlns:viewModels="clr-namespace:Japanese.ViewModels; assembly=Japanese"
             x:Class="Japanese.Cards" Title="{Binding Title}">
    <ContentPage.BindingContext>
        <viewModels:CardsViewModel />
    </ContentPage.BindingContext>
</ContentPage>

我想知道的是如何在我的C#后端访问这个上下文。

代码语言:javascript
复制
public partial class Cards : ContentPage
{

    public Cards()
    {
        InitializeComponent();
        NavigationPage.SetBackButtonTitle(this, "Back");
    }

    protected override void OnAppearing()
    {
        // I want to set some properties of the view here
EN

回答 1

Stack Overflow用户

发布于 2018-08-13 08:37:11

您似乎不能像XAML中的其他元素那样给它一个x:Name属性。在这种情况下,您的选项仅限于在代码隐藏中为绑定上下文声明对象,或从BindingContext属性引用对象。

对于后一种方法,这样做:

代码语言:javascript
复制
protected override void OnAppearing()
{
    var cardsViewModel = BindingContext as CardsViewModel;

    if (cardsViewModel == null)
        return;

    cardsViewModel.Property = Value;
}

先前的答案供参考:

你应该可以给它起一个这样的名字:

代码语言:javascript
复制
<ContentPage.BindingContext>
    <viewModels:CardsViewModel x:Name="cardsViewModel" />
</ContentPage.BindingContext>

这将有效地在生成的代码中创建这样的声明:

代码语言:javascript
复制
private CardsViewModel cardsViewModel;

您现在可以在代码隐藏中访问它:

代码语言:javascript
复制
protected override void OnAppearing()
{
    cardsViewModel.Property = Value;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51818201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档