首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向使用者隐藏Xamarin窗体自定义控件中的属性

如何向使用者隐藏Xamarin窗体自定义控件中的属性
EN

Stack Overflow用户
提问于 2020-10-21 23:49:14
回答 1查看 156关注 0票数 0

我有一个从StackLayout派生的自定义控件,它包含两个标签。每个标签的Text属性都绑定到代码隐藏中的一个属性

代码语言:javascript
复制
public string Label1Text
{
    get { return _label1Text; }
    set
    {
        _label1Text = value;
        OnPropertyChanged(nameof(Label1Text));
    }
}

标签的文本内容由控件使用者设置的代码幕后中的单独BindableProperty的内容确定,因此标签绑定到的属性在自定义控件之外不应真正可见。

如果我在代码中将属性设置为private,则控件的Xaml中的绑定将不起作用。但是,当设置为public时,它们在Intellisense中可见,这是错误的,因为它们仅供内部使用。

我可以设置属性

代码语言:javascript
复制
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]

但是这是正确的处理方法吗,因为它只隐藏了属性,而不是实际上阻止它们被控件的使用者设置?

EN

Stack Overflow用户

发布于 2020-10-22 13:12:04

您可以直接在Label.Text和viewmodel的属性之间创建绑定。

并定义仅供自定义控件内部内部使用的私有属性。

ViewModel

代码语言:javascript
复制
public class Model
{
    public string TextA { get; set; }
    public string TextB { get; set; }
}

页面

代码语言:javascript
复制
//code behind
public Page2()
    {
        InitializeComponent();

        Model model = new Model
        {
            TextA = "ABCD",
            TextB = "1234"
        };

        this.BindingContext = model;
    }

//xaml
<ContentPage.Content>
    <local:MyStack />
</ContentPage.Content>

自定义控件

代码语言:javascript
复制
 //code behind
 public partial class MyStack : ContentView
    {
        private string A { get; set; }   //internal use 
        private string B { get; set; }   //internal use 
        public MyStack()
        {
            InitializeComponent();
            this.BindingContextChanged += MyStack_BindingContextChanged;
        }

        private void MyStack_BindingContextChanged(object sender, EventArgs e)
        {
            var model = this.BindingContext as Model;

            A = model.TextA;
            B = model.TextB;
        }
    }

//xaml
 <ContentView.Content>
        <StackLayout>
            <Label Text="{Binding A}" TextColor="Red"/>
            <Label  Text="{Binding B}" TextColor="Green"/>
        </StackLayout>
  </ContentView.Content>
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64467273

复制
相关文章

相似问题

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