首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContentPage级别的Bindable属性

ContentPage级别的Bindable属性
EN

Stack Overflow用户
提问于 2019-07-25 12:27:17
回答 1查看 685关注 0票数 0

我有一个ContentPage,在这里我创建了一个可绑定的属性,这样我就可以将一些信息从ViewModel传递给实现ContentPage的类。

为了更清楚地说明,类后面的代码定义了新的可绑定属性(ConnectionSettingsEnabled):

代码语言:javascript
复制
public partial class ConnectionSettingsPage : ContentPage
{
    public static readonly BindableProperty ConnectionSettingsEnabledProperty = BindableProperty.Create(nameof(ConnectionSettingsEnabled), typeof(bool), typeof(ConnectionSettingsPage), true, propertyChanged: HandleConnectionSettingsEnabledChanged);
    public bool ConnectionSettingsEnabled
    {
        get { return (bool)GetValue(ConnectionSettingsEnabledProperty); }
        set { SetValue(ConnectionSettingsEnabledProperty, value); }
    }

    (... a bit more code...)
}

XAML有以下代码:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyProject.Pages.Settings.ConnectionSettingsPage"
         Title="{me:TranslateExtension Text=Server}"
         ConnectionSettingsEnabled="{Binding IsConnectionInfoEditable}">

一切都进行得很好,但我刚刚升级到macOS的VS8.2,现在新的编辑器(VS for macOS终于用VS的相同引擎替换了他们可怕的XAML编辑器)抱怨说,属性ConnectionSettingsEnabled没有在ContentPage类型中找到(考虑一下,这实际上是有意义的)。

奇怪的是,所有的东西都是完美的编译和工作,但我不能不感到这不是实现我想要的东西的正确方式。

任何人都有一个示例,说明为单个ContentPage实现可绑定属性并在其XAML中引用它的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 09:20:46

事业:

ConnectionSettingsEnabledConnectionSettingsPage的一个属性,.which不是ContentPage的属性。

您可以访问其他页面,例如将其放在TabbedPage中。

代码语言:javascript
复制
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage"
            x:Class="TabbedPageWithNavigationPage.MainPage">
    <local:ConnectionSettingsPage ConnectionSettingsEnabled="{Binding IsConnectionInfoEditable}" />

</TabbedPage>

解决方案:

首先,创建ContentPage的子类ConnectionSettingsPage

代码语言:javascript
复制
public  class ConnectionSettingsPage : ContentPage
{
  public static readonly BindableProperty ConnectionSettingsEnabledProperty = BindableProperty.Create(nameof(ConnectionSettingsEnabled), typeof(bool), typeof(ConnectionSettingsPage), true, propertyChanged: HandleConnectionSettingsEnabledChanged);

  private static void HandleConnectionSettingsEnabledChanged(BindableObject bindable, object oldValue, object newValue)
  {
            //...
  }

  public bool ConnectionSettingsEnabled
  {
    get { return (bool)GetValue(ConnectionSettingsEnabledProperty); }
    set { SetValue(ConnectionSettingsEnabledProperty, value); }
  }

  //...
}

在你的MainPage里

MainPage.xaml.cs

代码语言:javascript
复制
public partial class MainPage : ConnectionSettingsPage

在MainPage.xaml中

代码语言:javascript
复制
<local:ConnectionSettingsPage
    xmlns:local="clr-namespace:App11" xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:d="http://xamarin.com/schemas/2014/forms/design"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="xxx.MainPage"
    ConnectionSettingsEnabled="{Binding xxx}">

它可能会出现一些错误,因为IDE issue.You仍然可以构建它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57201963

复制
相关文章

相似问题

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