MvvmCross очень гибкий. То, что вы просите, не является встроенным, но вы можете легко расширить MvvmCross, чтобы добавить поддержку для него.
MvvmCross имеет так называемые Binding Builders. Здесь вы регистрируете пользовательские целевые привязки. Связывание имеет тип, например VideoView, а также название свойства «VideoUri».
Когда MvvmCross видит обязательный атрибут, как: local:MvxBind="VideoUri MyVideoUri"
будет принимать значение свойства из MyVideoUri, затем вызвать пользовательские привязки, которые ulimiately будет вызывать videoView.SetVideoURI()
.
Вот шаги, которые необходимо предпринять.
1) В своем Android-проекте отредактируйте Setup.cs и добавьте следующее, чтобы зарегистрировать свой собственный связующий строитель.
protected override MvxAndroidBindingBuilder CreateBindingBuilder()
{
return new MyAndroidBindingBuilder();
}
2) Создание пользовательского связывания строителя, который подкласс привязки по умолчанию Android строителя:
public class MyAndroidBindingBuilder : MvxAndroidBindingBuilder
{
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterCustomBindingFactory<VideoView>("VideoUri",
videoView => new MvxVideoViewUriTargetBinding(videoView));
}
}
3) Создать собственную цель привязки для типа VideoView и имущества "VIDEOURI":
public class MvxVideoViewUriTargetBinding : MvxAndroidTargetBinding
{
public MvxVideoViewUriTargetBinding(object target) : base(target)
{
}
public override Type TargetType
{
get { return typeof (string); }
}
protected override void SetValueImpl(object target, object value)
{
var videoView = (VideoView) target;
videoView.SetVideoURI(Uri.Parse((string)value));
}
}
Чтобы использовать его в своем макете, просто создайте следующее:
1) В Ваш layout.xml
<VideoView
android:id="@+id/SampleVideoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="VideoUri MyVideoUri" />
2) В вашем ViewModel добавьте свойство для MyVidoeUri
public string MyVideoUri
{
get { return "http://ia600507.us.archive.org/25/items/Cartoontheater1930sAnd1950s1/PigsInAPolka1943.mp4"; }
}
3) В вас View, вы можете запустить видео, как это:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.MyLayout);
// SetVideoURI() already called via binding
var videoView = FindViewById<VideoView>(Resource.Id.SampleVideoView);
videoView.Start();
}
Посмотрите на источник для MvxAndroidBindingBuild чтобы просмотреть текущие привязки. https://github.com/MvvmCross/MvvmCross/blob/bbf9a2ac76e74d9404f4b57036c6e29dfe2cc6c3/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs
Надеюсь, что это поможет.