Xamarin.ios 如何获取MvvmCross MKAnnotation实时更新绑定

Xamarin.ios 如何获取MvvmCross MKAnnotation实时更新绑定,xamarin.ios,xamarin,mapkit,mvvmcross,mvxbind,Xamarin.ios,Xamarin,Mapkit,Mvvmcross,Mvxbind,我试图在Xamarin iOS项目中实时更新MKMapKit注释 我使用的是MvvmCross,它的实现基于@slodge代码,运行得很好 我现在想做的是斯图尔特在他的一篇评论中提到的 public class HouseAnnotation : MKAnnotation { public HouseAnnotation(House house) { // use house here... // in theory you could als

我试图在Xamarin iOS项目中实时更新MKMapKit注释

我使用的是MvvmCross,它的实现基于@slodge代码,运行得很好

我现在想做的是斯图尔特在他的一篇评论中提到的

public class HouseAnnotation : MKAnnotation
{
    public HouseAnnotation(House house)
    {
        // use house here... 
        // in theory you could also data-bind to the house too (e.g. if it's location were to move...)
    }

    public override CLLocationCoordinate2D Coordinate { get; set; }
}
如何将
房屋
坐标绑定到
房屋注释。坐标

到目前为止,我一直在进行如下绑定:

var bindingSet = this.CreateBindingSet<View, ViewModel>();
var bindingSet=this.CreateBindingSet();
当您在viewDidLoad中执行此操作时,它可以直接工作,并且可以访问您需要的所有内容

我觉得我很自然地想这样做

var bindingSet = myView.CreateBindingSet<HouseAnnotation, House>();
var bindingSet=myView.CreateBindingSet();
但这意味着将对
myView
的引用向下传递到HouseAnnotation,这样就可以使用它调用
CreateBindingSet
,我怀疑这是否可行,因为House和HouseAnnotation不是任何Mvx基类的子类

我觉得我错过了一点谜题。有人能帮我吗


我知道房子不太可能搬走,但我正在为所有可能发生的事情做准备

您可以使用
WeakSubscribe

在24分钟左右,答案是n+38

公共类注释:MKAnnotation
{
私人住宅;;
公共房屋注释(房屋)
{
//创建本地引用
_房子=房子;
//我们现在更新,以便第一次设置注释坐标
UpdateLocation()
//订阅以获得Location属性更改的通知,从而触发UpdateLocation方法
_house.WeakSubscribe(“位置”(s,e)=>UpdateLocation());
}
私有void UpdateLocation()
{
//将我们的house.Location转换为CLLocationCoordinate2D,并将其设置在MKAnnotation.Coordinate属性上
坐标=新的CLLocationCoordinate2D(_house.Location.Lat,_house.Location.Lng);
}
公共覆盖CLLocationCoordinate2D坐标{
得到{
返回坐标;
}
设置{
//调用WillChangeValue和DidChangeValue将KVO用于
//一个MKAnnotation,以便在
//注释实例导致关联的注释
//视图以移动到新位置。
//我们还为其设置动画,以实现平滑过渡
UIView.Animate(0.25,()=>
{
WillChangeValue(“坐标”);
坐标=价值;
DidChangeValue(“坐标”);
});
}
}
}

有一个n+1视频介绍了这一点—“寻找僵尸(尽管我认为IOS8的地图更新代码需要一些更改)@slodge谢谢你,这正是我想要的。到目前为止,我在iOS 8上还看不到任何问题。贴图插针似乎正在按预期更新并设置动画。
public class HouseAnnotation : MKAnnotation
{
    private House _house;

    public HouseAnnotation(House house)
    {
        // Create a local reference
        _house = house;
        // We update now so the annotation Coordinate is set first time round
        UpdateLocation()
        // Subscribe to be notified of changes to the Location property to trigger the UpdateLocation method
        _house.WeakSubscribe<House>("Location", (s, e) => UpdateLocation());
    }

    private void UpdateLocation()
    {
        // Convert our house.Location to a CLLocationCoordinate2D and set it on the MKAnnotation.Coordinate property
        Coordinate = new CLLocationCoordinate2D(_house.Location.Lat, _house.Location.Lng);
    }

    public override CLLocationCoordinate2D Coordinate {
        get {
            return coord;
        }
        set {
            // call WillChangeValue and DidChangeValue to use KVO with
            // an MKAnnotation so that setting the coordinate on the
            // annotation instance causes the associated annotation
            // view to move to the new location.

            // We animate it as well for a smooth transition
            UIView.Animate(0.25, () => 
                {
                        WillChangeValue ("coordinate");
                        coord = value;
                        DidChangeValue ("coordinate");
                });
        }
    }
}