Изменить кнопки BackgroundColor с помощью MVVM - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть две кнопки. Когда я нажимаю одну кнопку, я хочу изменить другую кнопку BackgroundColor, используя mvvm. Я пытаюсь сделать так:

<StackLayout>
    <Button Text="Red" BackgroundColor="Accent" Command="{Binding ChangeButtons}" x:Name="btnRed"></Button>
    <Button Text="Blue" x:Name="btnBlue"></Button>
</StackLayout>

Когда я нажимаю btnRedЯ хочу, чтобы btnBlue BackgroundColor было изменено.Страница ModelView

public class ButtonColorViewModel
{
    public Command ChangeButtons
    {
        get
        {
            return new Command(() => {

               //Change here button background colors

            });
        }
    }
}

Как я могу это реализовать?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Лучший вариант, в зависимости от ваших представлений о MVVM, - избегать (насколько это возможно) использования пользовательского интерфейса внутри ViewModel. В предыдущем ответе используется цвет объекта. Если вы хотите сохранить MVVM в этом случае:

  • создать свойство с OnPropertyChanged, например, enum
  • Привязать его к кнопке цвета фона

  • Используйте конвертер для преобразования вашей собственности в цвет фона:)

Я знаю, что это больше, но больше похоже на MVVM.

Кроме того, если вы остаетесь только в пользовательском интерфейсе, переходите к коду. Используйте кнопку мыши и управляйте цветом фона напрямую.

0 голосов
/ 18 сентября 2018

По сути, вам нужно привязать свойство цвета.Вы можете изменить значение свойства в вашей команде.Вы можете настроить его в соответствии со своими потребностями, 2,3, цвета / кнопки и т. Д.:

public class ButtonColorViewModel
{
    public Command ChangeButtons
    {
        get
        {
            return new Command(() => {

               //Change here button background colors
               BackgroundColorBtn1 = Color.Green; //or something
            });
        }
    }


    private _backgroundColorBtn1 = Color.White;
    public Color BackgroundColorBtn1
    {
        get { return _backgroundColorBtn1;}
        set
        {
             if (value == _backgroundColorBtn1)
                 return;

             _backgroundColorBtn1 = value;
             NotifyOnPropertyChanged(nameof(BackgroundColorBtn1));
         }
    }
}

С XAML:

<StackLayout>
    <Button Text="Red" BackgroundColor="Accent" Command="{Binding ChangeButtons}" 
            x:Name="btnRed"></Button>
    <Button BackgroundColor="{Binding BackgroundColorBtn1}" Text="Blue" 
            x:Name="btnBlue"></Button>
</StackLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...