【问题标题】:Custom ToggleButton in Xamarin.AndroidXamarin.Android 中的自定义切换按钮
【发布时间】:2013-07-31 13:04:30
【问题描述】:

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

乌罗什

【问题讨论】:

  • 到目前为止您尝试过什么?在 Android 中实现和扩展控件及其在 MvvmCross 中的绑定非常简单。有关一些示例,请参阅 mvvmcross.wordpress.com 中的 N=18 和 N=28
  • 嗨斯图尔特。我同意在 MvvmCross 中实现自定义绑定是直截了当的。我查看了 N=18 教程,并且在 stackoverflow 上也找到了一些你的答案。但我认为我的问题无法通过自定义绑定来解决,因为我遇到了 ToggleButton 的视觉状态问题。我还尝试扩展 ToggleButton 并将 OnClickListener 附加到覆盖内,但我并没有走得太远。我搜索了解释该主题的文章,但找不到与我的问题相关的任何内容。

标签: xamarin.android mvvmcross togglebutton


【解决方案1】:

我找到了解决问题的方法。看来这与我为 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 事件处理程序中引发自定义事件,然后绑定到该事件。

乌罗斯

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2014-06-15
    • 2018-08-05
    • 2011-03-31
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2014-06-03
    相关资源
    最近更新 更多