1

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

乌罗什

4

1 回答 1

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 事件处理程序中引发自定义事件,然后绑定到该事件。

乌鲁斯

于 2013-08-01T14:11:02.713 回答