微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Xamarin XAML

如何解决如何在 Xamarin XAML

我想将 x:DataTypeBindingContext 一起使用,如下所示。

<ContentPage
    x:DataType="local:MainPageviewmodel">
    <ContentPage.BindingContext>
        <local:MainPageviewmodel />
    </ContentPage.BindingContext>

    <Label
        x:DataType="local:Titleviewmodel"
        BindingContext ="{Binding Innerviewmodel}" 
        Text="{Binding Title}" />

</ContentPage>

抱歉@Jason,我之前的模拟代码过于简化而导致误导..因此我更新了我的模拟代码,如下所示。

public class MainPageviewmodel
{
    private Titleviewmodel _innerviewmodel;
    public Titleviewmodel Innerviewmodel
    {
        get => _innerviewmodel;
        set => SetProperty(ref _innerviewmodel,value);
    }
}

public class Titleviewmodel
{
    private string _title;
    public string Title
    {
        get => _title;
        set => SetProperty(ref _title,value);
    }
}

我不使用 Innerviewmodel.Title 进行绑定的原因是 PropertyChanged 事件只检查属性路径。因此,如果我更新 Innerviewmodel.Title,它会引发 PropertyChanged 事件,路径为 "Title",而不是 "Innerviewmodel.Title"。它会导致问题。

我知道我可以像下面那样解决

public class MainPageviewmodel
{
    private void OnInnerviewmodelPropertyChanged(object sender,PropertyChangedArgs e)
    {
        // ...
        RaisePropertyChanged(this,"Innerviewmodel.Title");
    }
}

但是,我更喜欢更改 BindingContext 而不是中继 PropertyChanged 事件。


但是,由于以下原因,它构建失败。

错误 XFC0045:绑定:在“Local.Titleviewmodel”上找不到属性“Innerviewmodel”。

即使我像下面那样删除 x:DataType,仍然会失败,因为 MainPageviewmodel 没有 Title 属性

<Label
    BindingContext ="{Binding Innerviewmodel}"
    Text="{Binding Title}" />

因此,我放弃使用如下所示的 x:null 编译绑定。

<Label
    x:DataType="x:null"
    BindingContext ="{Binding Innerviewmodel}" 
    Text="{Binding Title}" />

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。