是否有可能綁定android複選框來執行更改命令?找不到示例MvvmCross複選框綁定到命令android xml
5
A
回答
14
標準方法是簡單地綁定到viewmodel中的bool類型的屬性,然後在此屬性的setter中執行您的邏輯。你的綁定,然後將這個樣子:
local:MvxBind="Checked IsChecked"
但是如果你真的需要綁定命令,你也可以綁定到Click事件:
local:MvxBind="Checked IsChecked; Click YourCommand;"
視圖模型:
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
RaisePropertyChanged(() => IsChecked);
}
}
public ICommand YourCommand
{
get
{
return new MvxCommand(() =>
{
var isChecked = IsChecked;
//Now you can use isChecked variable
});
}
}
注意你不會收到你的命令參數中複選框的值,所以你仍然需要綁定到bool屬性。這個解決方案的另一個問題是,你必須依靠一個事實,你的財產的設置者會在你的命令之前被調用。
如果你真的需要有bool參數的命令,那麼你絕對可以做到這一點。關於MvvmCross框架的令人敬畏的事情是,您可以隨時擴展其功能。在你的情況下,你需要實現CheckBox的自定義綁定。好的起點可能在這裏:http://slodge.blogspot.cz/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html
編輯:爲了說明它是多麼容易,我試了一下,並用bool參數實現了簡單的命令綁定。 (不能執行檢查)。如果有人感興趣,這裏是代碼。
Binding類:
public class CheckBoxChangedBinding
: MvxAndroidTargetBinding
{
private ICommand _command;
protected CheckBox View
{
get { return (CheckBox) Target; }
}
public CheckBoxChangedBinding(CheckBox view)
: base(view)
{
view.CheckedChange += CheckBoxOnCheckedChange;
}
private void CheckBoxOnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
{
if (_command == null)
return;
var checkBoxValue = e.IsChecked;
_command.Execute(checkBoxValue);
}
protected override void SetValueImpl(object target, object value)
{
_command = value as ICommand;
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneWay; }
}
public override Type TargetType
{
get { return typeof (ICommand); }
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
var view = View;
if (view != null)
{
view.CheckedChange -= CheckBoxOnCheckedChange;
}
}
base.Dispose(isDisposing);
}
}
在Setup.cs:
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterCustomBindingFactory<CheckBox>("CheckedChanged",
checkBox => new CheckBoxChangedBinding(checkBox));
}
在您的佈局:
<CheckBox
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
local:MvxBind="CheckedChanged CheckBoxCheckedCommand" />
最後視圖模型:
public ICommand CheckBoxCheckedCommand
{
get
{
return new MvxCommand<bool>(isChecked =>
{
var parameter = isChecked;
});
}
}
相關問題
- 1. 綁定複選框命令
- 2. MvvmCross android綁定到片段
- 3. MvvmCross Android - 用於按鈕命令的RelativeSource綁定的替代
- 4. 綁定複選框到ScrollBar.Visibility
- 5. MvvmCross Android BackgroundColor不綁定到ViewModel
- 6. 綁定在Angularjs複選框在指令
- 7. MvvmCross綁定到InteractionRequest
- 8. MvvmCross綁定到UIButton.TitleLabel.Text
- 9. WPF MVVM複選框停止命令從數據綁定發射
- 10. ItemTemplate中的複選框導致NullReferenceException用於命令綁定
- 11. 複選框綁定
- 12. 綁定的Android使用MvvmCross
- 13. 複選框命令,檢查 - 確定,取消選中不好,我如何綁定取消選中命令?
- 14. 如何將複選框綁定到ListView
- 15. MVVM - 如果選中複選框,則綁定到複選框
- 16. 複選框綁定到布爾值twoway
- 17. 綁定命令到複選框的onclick一個xamdatagrid裏面WPF不工作
- 18. WPF綁定複選框IsChecked到其他複選框(IsChecked ||!IsEnabled)
- 19. MvvmCross綁定UIImageView到字節[]
- 20. 綁定到Mvvmcross中的TableLayout
- 21. MvvmCross命令模式
- 22. 將值綁定到複選框
- 23. 將複選框綁定到Timer.Enabled
- 24. WPF綁定複選框到布爾?
- 25. 將int綁定到複選框
- 26. 複選框未綁定到控制器
- 27. 綁定到listView複選框的動作
- 28. 將對象綁定到複選框
- 29. 春天。將複選框綁定到ModelAttribute
- 30. 綁定到複選框集合