Привязка текста цифровой клавиатуры к количеству или UnitPrice в зависимости от нажатой кнопкиC#

Место общения программистов C#
Ответить
Anonymous
 Привязка текста цифровой клавиатуры к количеству или UnitPrice в зависимости от нажатой кнопки

Сообщение Anonymous »

Фактический проект
Я хочу создать многоразовый элемент управления Numpad, имеющий привязываемое свойство Text. Нажатие любой кнопки на цифровой клавиатуре приведет к изменению свойства, привязанного к тексту цифровой клавиатуры.
Модель представления ItemViewModel инкапсулирует Quantity и UnitPrice.

Код: Выделить всё

MainPage
с BindingContext, установленным в ItemViewModel, например, имеет Label, привязанный к Quantity, и другой Label, привязанный к UnitPrice и цифровая клавиатура.
Если нажать первую метку, текст цифровой клавиатуры будет привязан к количеству. Если нажать вторую метку, текст на цифровой клавиатуре будет привязан к UnitPrice.
Рассмотрим следующий рисунок:
< img alt="введите описание изображения здесь" src="https://i.sstatic.net/e8pIcGWv.png" />
Минимальный код
< р>Ради простота, позвольте мне смоделировать цифровую клавиатуру с помощью всего двух кнопок. Они просто увеличивают или уменьшают значение, привязанное к тексту.
Также позвольте мне использовать две кнопки вместо двух меток для программного связывания текста Numpad с любым количеством или UnitPrice.

Код: Выделить всё

public partial class ItemViewModel : ObservableObject
{
[ObservableProperty]
double _quantity;

[ObservableProperty]
double _price;

[ObservableProperty]
string _selectedProperty;

[RelayCommand]
void SetSelectedProperty(string selectedProperty)
=> SelectedProperty = selectedProperty;
}
Настраиваемая цифровая клавиатура:

Код: Выделить всё

public partial class Numpad : ContentView
{
double? _value;

public static readonly BindableProperty TextProperty =
BindableProperty.Create(
propertyName: nameof(Text),
returnType: typeof(string),
defaultValue: "0",
defaultBindingMode: BindingMode.TwoWay,
declaringType: typeof(Numpad),
propertyChanged: (bindable, oldValue, newValue) =>
{
var @this = (Numpad)bindable;
((Command)@this.UpCommand).ChangeCanExecute();
((Command)@this.DownCommand).ChangeCanExecute();
});

public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}

public ICommand UpCommand { get; }
public ICommand DownCommand { get; }

public Numpad()
{
UpCommand = new Command(
execute: () =>
{
Text = $"{_value + 1}";
},
canExecute: () =>
{
if (double.TryParse(Text, out double x))
{
_value = x;
return true;
}

_value = null;
return false;
}
);

DownCommand = new Command(
execute: () =>
{
Text = $"{_value - 1}";
},
canExecute: () =>
{
if (double.TryParse(Text, out double x))
{
_value = x;
return _value > 0;
}

_value = null;
return false;
}
);
InitializeComponent();
}
}
и его XAML: Оба затем используются в MainPage следующим образом:

Код: Выделить всё

public MainPage()
{
InitializeComponent();
BindingContext = new ItemViewModel { Quantity = 3, Price = 5 };
}
Ожидаемое поведение
  • Нажатие одной из первых двух кнопок должно связать текст на цифровой клавиатуре< /code> на Quantity или UnitPrice.
  • Нажатие любой кнопки в Numpad должно изменить свойство, привязанное к Numpad. Текст.
К сожалению, это не работает, текст выбранной кнопки не меняется при нажатии кнопки Numpad.
Что это такое преступник? Я застрял с этой проблемой почти 6 месяцев.

Подробнее здесь: https://stackoverflow.com/questions/793 ... cked-butto
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»