Формы Xamarin связывают команду в пользовательском контроллере с помощью Prism - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема, и я не могу ее решить. У меня есть пользовательский элемент управления, чтобы упростить его, скажем, у меня есть кнопка внутри рамки внутри рамки. Я хочу, чтобы команда кнопки была привязываемой, а кнопка была закрытой. Итак, вот мой код:

CustomControl.cs:

public System.Windows.Input.ICommand CommandInButton
{
    get { return ButtonInFrame.Command; }
    set { ButtonInFrame.Command = value; }
}

public static readonly BindableProperty CommandInButtonProperty = 
    BindableProperty.Create(
        propertyName:"CommandInButton",
        returnType: typeof(System.Windows.Input.ICommand),
        declaringType: typeof(CustomControl),
        defaultBindingMode: BindingMode.TwoWay);

private Button ButtonInFrame;

Myview.xaml:

<local:FrameButtonImage Grid.Column="0" Grid.Row="0"
                                ColorInButton="LightBlue"
                                SourceImageInButton="male.png"
                                IsSelected="{Binding IsMenSelected}"
                                CommandInButton="{Binding SelectMenCommand}"
                                />

MyViewModel.cs: (я использую Prism)

public DelegateCommand SelectMenCommand {get; приватный набор; }

public MainPageViewModel()
{
    SelectMenCommand = new DelegateCommand(SelectMen, CanSelectMen);
}
    private void SelectMen()
{
    System.Diagnostics.Debug.WriteLine("Hello men");
}

private bool CanSelectMen()
{
    return !IsMenSelected;
}

Моя проблема: никогда не срабатывает SelectMen ().

Если я свяжу команду с простой кнопкой, подобной этой:

<Button Grid.Column="1" Grid.Row="0" Grid.RowSpan="3"
                Text=">"
                FontSize="Large"
                BackgroundColor="Transparent"
                HorizontalOptions="Center"
                VerticalOptions="Center"
                Command="{Binding SelectMenCommand}"/>

Это работа, как шарм! Итак, я предположил, что я делаю беспорядок в CustomControl.cs ... Может быть, кто-то может мне помочь? Спасибо !

1 Ответ

0 голосов
/ 02 мая 2018

Я нашел обходной путь, но я уверен, что можно сделать лучше. Я установил свою команду в качестве свойства моего пользовательского элемента управления и добавил метод, чтобы она стала командой кнопки, когда она установлена.

CustomControl.cs:

public System.Windows.Input.ICommand CommandInButton
{
    get; set;
}

public static readonly BindableProperty CommandInButtonProperty =
    BindableProperty.Create(
        propertyName: "CommandInButton",
        returnType: typeof(System.Windows.Input.ICommand),
        declaringType: typeof(CustomControl),
        defaultValue: null,
        propertyChanged: CommandInButtonPropertyChanged);

private static void CommandInButtonPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
    var control = (CustomControl)bindable;
    control.ButtonInFrame.Command = (System.Windows.Input.ICommand)newValue;
}
...