我有一个自定义控件CustomTextBox.xaml
:
<AbsoluteLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.Core.Controls.CustomTextBox"
xmlns:controls="clr-namespace:MyApp.Core.Controls;assembly=MyApp.Core"
BackgroundColor="White">
<AbsoluteLayout.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTapped"/>
</AbsoluteLayout.GestureRecognizers>
<Entry x:Name="textValueEntry" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0.5, 1, 0.9, 0.9" FontAttributes="Bold"/>
<Label x:Name="placeholderLabel" AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="0.05, 0.5" FontSize="18"/>
</AbsoluteLayout>
我希望能够从父视图绑定到textValueEntry
控件。因此,我在CustomTextBox.xaml.cs
中添加了一个可绑定的属性:
private string _textValue;
public string TextValue
{
get
{
return _textValue;
}
set
{
_textValue = value;
}
}
public static BindableProperty TextValueProperty = BindableProperty.Create(nameof(TextValue), typeof(string), typeof(CustomTextBox), string.Empty, BindingMode.TwoWay, null,
(bindable, oldValue, newValue) =>
{
(bindable as CustomTextBox).textValueEntry.Text = (string)newValue;
});
我尝试像这样从父视图绑定到它:
<controls:CustomTextBox HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" HeightRequest="50" TextValue="{Binding UsernamePropertyInViewModel, Mode=TwoWay}"/>
启动应用程序时, TextValue
属性设置为UsernamePropertyInViewModel
,正如我在textValueEntry
中看到的那样。但是,当我更改textValueEntry
中的文本时,它不会更新UsernamePropertyInViewModel
。我如何绑定它,以便在我更改UsernamePropertyInViewModel
中的文本时更新textValueEntry
?
答案 0 :(得分:1)
据我所知,您的CustomTextBox
项textValueEntry
没有绑定您的TextValue属性。
对于TextValue
,您的BindableProperties
属性也需要看起来像这样。您需要将 BindableProperty 设置为绑定的适当值。无需为TextValue
使用私有后备变量。
public string TextValue
{
get => (string)GetValue(TextValueProperty);
set => SetValue(TextValueProperty, value);
}
Parent.Xaml
<Entry x:Name="textValueEntry" Text="{Binding Path=TextValue, Source={x:Reference Page}}" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0.5, 1, 0.9, 0.9" FontAttributes="Bold"/>
您的页面将需要一个{:{1}}的x:Name =“ Page”