У меня есть простой составленный настраиваемый элемент управления, который отображает текст, установленный для связанного свойства ControlText
. В приведенном ниже примере вы можете видеть, что при нажатии кнопки элемент управления обновляется.
Как я могу изменить код, чтобы метка, отображаемая элементом управления, принимала все, что ему отправляется, и преобразовывала ее в верхний регистр?
Поэтому вместо показа...
Количество=5
это бы показало...
СЧЕТ=5
В этом простом примере для этого можно использовать IValueConverter, но я хочу увидеть другую реализацию для гораздо более сложного примера, который мне нужно реализовать. Я ищу решение, которое перехватывает значение, установленное в коде позади, преобразует его и устанавливает его в свойство ControlText пользовательского элемента управления.
SimpleControl.xaml.cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SimpleControl : ContentView
{
public SimpleControl ()
{
InitializeComponent ();
}
public static readonly BindableProperty ControlTextProperty = BindableProperty.Create(
propertyName: nameof(ControlText),
returnType: typeof(string),
declaringType: typeof(SimpleControl),
defaultBindingMode: BindingMode.TwoWay,
defaultValue: "Hello World");
public string ControlText
{
get { return (string)base.GetValue(ControlTextProperty); }
set { base.SetValue(ControlTextProperty, value); }
}
}
Кроме того, я ожидаю, что во время выполнения эта точка останова сработает, но код никогда не останавливается на ней. Я устанавливаю свойство из SimplePageModel, поэтому мне кажется странным, что это никогда не срабатывает. Может ли кто-нибудь объяснить это и мне?
SimpleControl.xaml
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App7.SimpleControl"
x:Name="this">
<ContentView.Content>
<StackLayout Margin="100">
<Label Text="{Binding Source={x:Reference this}, Path=ControlText}" />
</StackLayout>
</ContentView.Content>
</ContentView>
SimplePage.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App7"
x:Class="App7.SimplePage">
<ContentPage.Content>
<StackLayout>
<local:SimpleControl ControlText="{Binding ControlText}" />
<Button Text="Update Control"
Command="{Binding UpdateControl}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
SimplePageModel.cs (с использованием FreshMVVM)
public class SimplePageModel : FreshBasePageModel
{
public SimplePageModel() { }
private int _index;
public string ControlText { get; set; }
public Command UpdateControl
{
get
{
return new Command((t) =>
{
ControlText = $"Count = {++_index}";
});
}
}
public override void Init(object initData)
{
ControlText = $"Count = 0";
base.Init(initData);
}
}