gpt4 book ai didi

Xamarin 形式 : Content View doesn't display in content page

转载 作者:行者123 更新时间:2023-12-02 17:39:43 26 4
gpt4 key购买 nike

正在尝试在内容页面中加载内容 View 。当我运行代码时,它不会出现在我的内容 View 中。我正在从我的内容页面分配两个可绑定(bind)参数。

内容页面:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:templates="clr-namespace:G2.Scanner.Views.Templates"
xmlns:viewModelBase="clr-namespace:G2.Scanner.ViewModels.Base;assembly=G2.Scanner"
xmlns:telerikPrimitives="clr-namespace:Telerik.XamarinForms.Primitives;assembly=Telerik.XamarinForms.Primitives"
xmlns:local ="clr-namespace:G2.Scanner.Views.Transaction"
x:Class="G2.Scanner.Views.Transaction.TransactionView"
viewModelBase:ViewModelLocator.AutoWireViewModel="true">

<local:GenerateScreen x:Name="generateScreen" ControllerName="{Binding ControllerName}" IsBusy="{Binding IsBusy}"/>

</ContentPage>

内容 View :

public partial class GenerateScreen : ContentView
{
#region BindableProperties
public static readonly BindableProperty ControllerNameProperty = BindableProperty.Create("ControllerName", typeof(string), typeof(GenerateScreen));
public static readonly BindableProperty IsBusyProperty = BindableProperty.Create("IsBusy", typeof(bool), typeof(GenerateScreen));
#endregion

#region Properties
public string ControllerName
{
get { return (string)GetValue(ControllerNameProperty); }
set { SetValue(ControllerNameProperty, value); }
}

public bool IsBusy
{
get { return (bool)GetValue(IsBusyProperty); }
set { SetValue(IsBusyProperty, value); }
}
#endregion

public GenerateScreen()
{
InitializeComponent();
DesignScreenAsync();
}

public async void DesignScreenAsync()
{
IsBusy = true;

// Some Design code..

#region render
scroll = new ScrollView
{
Content = layout
};
TransactionElements.Children.Add(scroll);
#endregion
IsBusy = false;
}

内容 View 接受两个可绑定(bind)属性并在加载时使用。

内容 View Xaml:

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="G2.Scanner.Views.Transaction.GenerateScreen">
<ContentView.Content>
<StackLayout x:Name="TransactionElements"/>
</ContentView.Content>
</ContentView>

我希望在加载内容页面时呈现此 View 。我发现如果我不在内容 View 中使用可绑定(bind)属性,这将有效。但根据我的要求 ContentView 类中的 ControllerNameIsBusy 应该是可绑定(bind)属性。任何帮助为什么它没有点击此 View 。

最佳答案

感谢大家抽出宝贵的时间。我实际上为自己找到了解决方案。

实际出错的地方有两个地方。

  1. 可绑定(bind)属性仅在类初始化后设置。因此,如果我们在构造函数中调用 DesignScreenAsync 方法,该方法采用 ControllerName 的值,则显然将为 null。解决方案是调用 ControllerNamePropertyChanged 方法中的方法。

这是代码:

public static readonly BindableProperty ControllerNameProperty = BindableProperty.Create(nameof(ControllerName), typeof(string), typeof(GenerateScreen),default(string), propertyChanged: OnControllerPropertyChange);

private static void OnControllerPropertyChange(BindableObject bindable, object oldValue, object newValue)
{
((GenerateScreen)bindable).DesignScreenAsync();
}

请注意,我使用了 BindableObject 来调用该方法。这是从同一个实例中调用方法。

  • contentView 没有命中的原因是我没有为 bool IsBusyProperty 设置默认值,因此设置默认值很重要可绑定(bind)的属性。
  • 这是代码:

    public static readonly BindableProperty IsBusyProperty = BindableProperty.Create(nameof(IsBusy), typeof(bool), typeof(GenerateScreen), default(bool), defaultBindingMode: BindingMode.TwoWay);

    关于Xamarin 形式 : Content View doesn't display in content page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50577027/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com