如何解决如何向消费者隐藏Xamarin Forms自定义控件中的属性 ViewModel 页面自定义控件
我有一个从StackLayout派生的自定义控件,其中包含两个Label。每个Label的Text属性都绑定到背后代码中的一个属性
public string Label1Text
{
get { return _label1Text; }
set
{
_label1Text = value;
OnPropertyChanged(nameof(Label1Text));
}
}
标签的文本内容由控件的使用者设置的背后代码中单独的BindableProperty的内容确定,因此,标签的绑定属性在自定义控件之外不应真正可见
如果我在代码的后面将属性设置为私有,则控件Xaml中的绑定将不起作用。但是,当设置为public时,它们在Intellisense中可见,这是错误的,因为它们仅供内部使用。
我可以设置属性
[browsable(false),Editorbrowsable(EditorbrowsableState.Never)]
关于属性,但这是处理此问题的正确方法,因为它仅隐藏了属性,实际上并未阻止控件的使用者设置它们?
解决方法
您可以直接在Label.Text
和viewmodel的属性之间创建绑定。
并定义私有属性,仅供内部在自定义控件中使用。
ViewModel
public class Model
{
public string TextA { get; set; }
public string TextB { get; set; }
}
页面
//code behind
public Page2()
{
InitializeComponent();
Model model = new Model
{
TextA = "ABCD",TextB = "1234"
};
this.BindingContext = model;
}
//xaml
<ContentPage.Content>
<local:MyStack />
</ContentPage.Content>
自定义控件
//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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。