簡體   English   中英

Xamarin Mvvm在UWP上跨Fluent綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM