2013-07-31 1 views
0

Я работаю над приложением для Android на MvvmCross. Приложение содержит (помимо всего прочего) большое количество ToggleButton (s). Кнопки добавляются в файлы .axml. Свойство Checked и событие Click привязаны к свойствам view-model. Поскольку свойство Checked каждого ToggleButton должно отражать состояние какого-либо свойства на сервере приложений, я не хочу, чтобы их состояние проверки было изменено, когда пользователь нажимает на них, но только тогда, когда свойство bound на модели представления изменено , Например, как эта «специальная» кнопка переключения должна работать: когда пользователь нажимает на нее, свойство «Проверено» кнопки не изменяет только ICommand, к которой привязано событие клика. Метод, вызываемый командой, в свою очередь изменяет значение свойства в модели представления (если выполняется успешно). Расширение ToggleButton в WPF или Windows Forms до описанных функций легко, но я не знаю, как это сделать в Android. Любые идеи оценят.Пользовательский ToggleButton в Xamarin.Android

Uroš

+0

Что вы пробовали? Внедрение и расширение элементов управления в Android и их привязках в MvvmCross прямолинейно. Для некоторых примеров см. N = 18 и N = 28 в http://mvvmcross.wordpress.com – Stuart

+0

Привет Стюарт. Я согласен, что реализация пользовательских привязок в MvvmCross прямолинейна. Я проверил N = 18 tuttorial, а также нашел несколько ваших ответов здесь, в stackoverflow. Но я думаю, что моя проблема не может быть решена с помощью пользовательской привязки, поскольку у меня возникают проблемы с визуальным состоянием ToggleButton. Я также попытался расширить ToggleButton и привязать OnClickListener внутри переопределения, но я не очень далеко продвинулся. Я googled для статей, объясняющих тему, но не мог найти ничего, что можно было бы вернуть к моей проблеме. –

ответ

0

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

MyToggleButton было реализовано как:

public sealed class MyToggleButton : ToggleButton, View.IOnClickListener 
{ 
    public MyToggleButton(Context context, IAttributeSet attrs) 
     : base(context, attrs) 
    { 
     SetOnClickListener(this); 
    } 

    public void OnClick(View v) 
    { 
     Checked = !Checked; 
    } 
} 

Как вы можете видеть, что я просто установить Checked свойства назад к предыдущему значению, когда-либо пользователь нажимает кнопку. В asmx я использую следующий блок, чтобы добавить кнопку.

<controls.MyToggleButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    local:MvxBind="Checked Value;Click ClickCommand" /> 

Как выясняется, проблема с описанным решением заключается в том, что метод OnClick (View v) не выполняется, когда пользователь нажимает на кнопку до тех пор, пока файл .axms содержит привязки к Нажмите событие. Я понятия не имею, почему это так, я хотел бы получить какое-либо объяснение. Обходной путь, который я использовал, - это определить пользовательское событие в производном классе, поднять пользовательское событие в обработчике события OnClick и связать его с этим событием.

Uros