我有这样的代码:如何更改ViewCell物品值?
class CustomCell : ViewCell
{
private readonly Label _label;
public static readonly BindableProperty DataProperty = BindableProperty.Create("Data", typeof(string), typeof(CustomCell), "Data");
public string Data
{
get { return (string)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
...
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if (BindingContext != null)
{
_label.Text = Data;
}
}
}
,当我使用此代码值传递给它的ListView它工作得很好,:
<customUi:CustomCell Data="{Binding Data}" />
但是,有时我想能从CustomCell
本身改变Data
。当我简单地通过编写this.Data = "new value";
来改变它时,标签文本不会改变。我可以写简单的_label.Text = "new value";
,它的工作原理,但它只是感觉不对。此外,更改Data
,然后致电OnBindingContextChanged()
也感觉不对。
这样做的正确方法是什么?
,例如如果数据是十进制的,我希望它以某种特定的方式显示在标签中,那么我建议我应该使用ValueConverter,对吧? – nicks
这取决于你。对于我在多个地方所做的事情,我绝对使用价值转换器,是的。如果我只需要一次只需要一些东西,我可能会覆盖已更改的on属性并将值转换为该值,或者创建一个字符串类型的helper属性,以便自动转换该值。全部取决于你的喜好和你期望道具改变的频率。全局字典中的静态转换器实例是安全的选择。 – irreal