Как связать свойство BackgroundColor представления с моделью представления в формах Xamarin? - PullRequest
1 голос
/ 24 февраля 2020

Итак, я делаю приложение в Xamarin Forms, используя Fre sh MVVM, и хочу, чтобы событие выполнялось при нажатии кнопки, и только если BackgroundColor кнопки белый. BackgroundColor кнопки изменится в XAML.CS, в то время как это событие произойдет в ViewModel.

Проблема в том, что с текущим кодом, который у меня есть, свойство моего ViewModel имеет все основные цвета и свойства установите 0 вместо фактических свойств цвета кнопки. Я уже искал ответ, но мне ничего не помогло.

Вот код XAML:

<Button
            x:Name="Button_NextStep"
            HeightRequest="50"
            WidthRequest="400"
            BackgroundColor="{Binding NextStepBackgroundColor}"
            CornerRadius="30"

            Text="Next step"
            TextColor="#4847FF"
            FontAttributes="Bold"
            FontSize="20"

            VerticalOptions="Start"
            HorizontalOptions="Start"
            Margin="25,178,25,5"

            Command="{Binding NextStep}"
></Button>

Код ViewModel:

class CreateAccount_UsernameViewModel: FreshBasePageModel
    {
        public ICommand NextStep { get; set; }
        public Color NextStepBackgroundColor { get; set; }

        public InavigationService navigationService; //this is irrelevant for this question

        public CreateAccount_UsernameViewModel(InavigationService _navService)
        {
            navigationService = _navService; //this is irrelevant for this question

            NextStep = new Command(() =>
            {
                if (NextStepBackgroundColor == Color.FromHex("#FFD3D3D3"))
                    navigationService.SwitchNavigationStacks(Enums.NavigationStacks.CreateAccount, this); //this is irrelevant for this question
            });
        }
    }

И это все Если вам нужна дополнительная информация, чтобы облегчить решение, я предоставлю ее вам, как только увижу ваш запрос. Спасибо всем за потраченное время, надеюсь, вам удачного дня.

1 Ответ

1 голос
/ 24 февраля 2020

Основные режимы привязки: - ( Expect OneTime и Default (не требует пояснений от имени ))

  1. OneWay = изменение значения в ViewModel установлено на просмотр (здесь кнопка). Это значение по умолчанию для большинства свойств.

  2. TwoWay = Изменение значения как в ViewModel, так и в представлении получает уведомление. Для него устанавливаются свойства, которые изменяются со стороны источника, например, свойство Text в Entry, свойство SelectedItem в ListView и т. Д.

  3. OneWayToSource = Об изменении значения в View уведомляется ViewModel, но об изменении значения в ViewModel не уведомляется View.

Проблема в вашем сценарии заключается в том, что BindingMode из BackgroundColor свойство Button по умолчанию OneWay, также не имеет смысла сохранять BindingMode из BackgroundColor из Button как TwoWay, так как значение не будет изменяться со стороны управления.

Но изменение свойства BackgroundColor должно быть отражено в ViewModel, следовательно, BindingMode должен быть установлен в OneWayToSource.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...