Xamarin.Android中的自定义ToggleButton

时间:2013-07-31 13:04:30

标签: xamarin.android mvvmcross togglebutton

我正在开发基于MvvmCross的Android应用程序。该应用程序包含(除其他外)大量的ToggleButton(s)。这些按钮添加在.axml文件中。他们的Checked属性和Click事件绑定到视图模型属性。由于每个ToggleButton的Checked属性应该反映应用程序服务器上某些属性的状态,我不希望在用户单击它们时更改它们的检查状态,但仅当视图模型上的bound属性发生更改时。此“特殊”切换按钮应如何工作的示例:当用户单击它时,按钮的“已检查”属性不会仅更改调用click事件所绑定的ICommand。该命令调用的方法依次更改视图模型上的属性值(如果成功执行)。将WPF或Windows窗体中的ToggleButton扩展到所描述的功能很容易,但我不知道如何在android中执行此操作。任何想法都会受到赞赏。

UROS

1 个答案:

答案 0 :(得分: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" />

事实证明,所描述的解决方案的问题是,只要.axms文件包含对Click事件的绑定,当用户单击该按钮时,不会执行OnClick(View v)方法。我不知道为什么会这样,我会喜欢任何解释。我使用的解决方法是在派生类中定义自定义事件,在OnClick事件处理程序中引发自定义事件,然后绑定到该事件。

乌罗什