[英]Xamarin MvvmCross Fluent Binding on UWP
我正在制作Windows UWP應用,並且試圖在視圖MvxWindowsPage上進行流暢的綁定。 當我聲明MvxFluentBindingDescriptionSet
var set = this.CreateBindingSet<FirstView, FirstViewModel>();
它給出了一個建立時間錯誤:
在通用類型或方法中,類型“ FirstView”不能用作類型參數“ TTarget”。沒有從“ FirstView”到“ MvvmCross.Binding.BindingContext.IMvxBindingContextOwner”的隱式引用轉換。
我的WindowsPage聲明如下:
using MvvmCross.Uwp.Views;
using MyApp.Core.ViewModels;
using MvvmCross.Binding.BindingContext;
public sealed partial class FirstView : MvxWindowsPage<FirstViewModel>
{
public FirstView()
{
this.InitializeComponent();
//This line below gives me the build time error
var set = this.CreateBindingSet<FirstView, FirstViewModel>();
set.Bind(myButton)
.To(viewmodel => viewmodel.DoStuffSelected);
}
}
如何在UWP App中進行流暢的綁定? 還是僅對表單綁定支持UWP應用?
通過查看他們如何在WPF中實施此修復程序,我能夠解決此問題。 不知道這是否100%正確,但是它對我在MvxWindowsPage視圖中實現MvxInteraction起作用(使用MvvmCross v6.2.3):
using ExampleApp.Uwp.Interactions;
using ExampleApp.Uwp.ViewModels;
using MvvmCross.Base;
using MvvmCross.Binding.BindingContext;
using MvvmCross.Platforms.Uap.Presenters.Attributes;
using MvvmCross.ViewModels;
namespace ExampleApp.Uwp.Views
{
public sealed partial class LibrariesView : IMvxBindingContextOwner
{
private IMvxInteraction<AppNotificationInteraction> _appNotificationInteraction;
private IMvxBindingContext _bindingContext;
public LibrariesView()
{
InitializeComponent();
}
public IMvxInteraction<AppNotificationInteraction> AppNotificationInteraction
{
get => _appNotificationInteraction;
set
{
if (_appNotificationInteraction != null)
{
_appNotificationInteraction.Requested -= AppNotificationInteractionOnRequested;
}
_appNotificationInteraction = value;
_appNotificationInteraction.Requested += AppNotificationInteractionOnRequested;
}
}
public IMvxBindingContext BindingContext
{
get => _bindingContext ?? (_bindingContext = new MvxBindingContext());
set => _bindingContext = value;
}
public new LibrariesViewModel ViewModel => base.ViewModel as LibrariesViewModel;
protected override void OnViewModelSet()
{
base.OnViewModelSet();
BindingContext.DataContext = ViewModel;
var set = this.CreateBindingSet<LibrariesView, LibrariesViewModel>();
set.Bind(this).For(view => view.AppNotificationInteraction).To(viewModel => viewModel.AppNotificationInteraction).OneWay();
set.Apply();
}
private void AppNotificationInteractionOnRequested(object sender, MvxValueEventArgs<AppNotificationInteraction> e)
{
AppNotification.Show(e.Value.Content);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.