【发布时间】:2015-01-19 17:36:02
【问题描述】:
我在 MvvmCross Android 中遇到了一种情况,我将 SeekBar 的位置绑定到视图模型中的属性。可以通过滑动搜索栏或通过 Web 套接字上发生的外部 api 交互来更新属性。如果用户当前正在滑动搜索栏,我不希望外部 api 能够更新属性并导致搜索栏明显跳来跳去。
我试图通过在用户开始滑动和停止滑动时设置 IsDimming 属性来做到这一点。但是,一旦我分配了这些本机 EventHandler,当您拖动搜索栏时,我的属性的 set {} 部分就不再被击中。
在 XML 视图中绑定:
<SeekBar
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:id="@+id/seekBar"
android:max="100"
local:MvxBind="Progress DimmerPosition" />
视图模型中的属性:
public bool IsDimming { get; set; }
private float _dimmerPosition;
public float DimmerPosition {
get {
return _dimmerPosition;
}
set { // This isn't hit when I have assigned native event handlers
_dimmerPosition = value;
_eventService.SendLightingState (UUIDAction, Number, value);
RaisePropertyChanged (() => DimmerPosition);
}
}
我在视图代码中的原生 Android 事件处理程序:
var slider = FindViewById<SeekBar> (Resource.Id.seekBar);
slider.StartTrackingTouch += (object sender, SeekBar.StartTrackingTouchEventArgs e) => {
ViewModel.IsDimming = true;
};
slider.StopTrackingTouch += (object sender, SeekBar.StopTrackingTouchEventArgs e) => {
ViewModel.IsDimming = false;
};
有什么方法可以让我绑定并使用事件处理程序?值得注意的是,当我分配给 TouchDown 和 TouchUpInside 事件处理程序时,绑定在 iOS 中继续正常工作。
非常感谢
汤姆
【问题讨论】: