Tag: mvvmcross

如何在mvvmcross视图模型中使用async?

我在mvvmcross viewmodel中有一个长时间运行的进程,并希望将其设置为异步( http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx )。 Xamarin的测试版渠道目前支持async关键字。 下面是我目前如何实现异步的示例。 IsBusy标志可以绑定到UI元素并显示加载消息。 这是正确的方法吗? public class MyModel: MvxViewModel { private readonly IMyService _myService; private bool _isBusy; public bool IsBusy { get { return _isBusy; } set { _isBusy = value; RaisePropertyChanged(() => IsBusy); ; } } public ICommand MyCommand { get { return new MvxCommand(DoMyCommand); } } public MyModel(IMyService myService) { […]

如何在android MvvmCross Xamarin中设置ProgressBar的可见性

我正在尝试将ProgressBar visibility设置为GONE 。 在XML中 在 ViewModel中 private bool _progressVisibility; public bool ProgressVisibility { get { return _progressVisibility; } set { _progressVisibility = value; RaisePropertyChanged(() => ProgressVisibility); } } 我正在设置ProgressVisibility = false; 发生了什么 :视图仍然可见,而不是隐藏。 如何解决这个问题。

MvvmCross; 如何从另一个ViewModel RaisePropertyChange

我有一个ShoppingCart listView包含绑定到ShopingCartViewModel的项目 。 当我点击一个项目时,它会将我带到ItemInfoFragment ,它绑定到ItemInfoViewModel 。 在ItemInfoFragment中,我有一个按钮 ,用于删除 项目并将其从ShoppingCart 列表视图中 删除 。 我的问题是 ; 删除 项目 并按 后退按钮返回到我之前的 活动后 , ShoppingCart listView仍显示我删除的项目 。 我的问题是; 当我退出ItemInfoFragment时,如何在ShoppingCartViewModel中RaisePropertyChange?

MvvmCross MvxWindowsPage 编译错误

我正在使用MvvmCross框架编写Xamarin.iOS , Xamarin.Android和UWP跨平台应用程序。 我正在创建一个具有LoginViewModel的LoginPage。 在Xamarin.iOS , Xamarin.Android项目中,ViewModel和View的绑定与下面的工作正常 public class LoginActivity : MvxAppCompatActivity public partial class LoginViewController : MvxViewController 尝试在UWP项目上执行与上面相同的操作,我收到一些错误。 在XAML中: 我的C#代码是 public sealed partial class LoginView : MvxWindowsPage 但我得到编译错误。 我该如何解决? 元素’MvxWindowsPage’上的’未知成员’TypeArguments’ 名称“LoginViewModel”在命名空间“using:MyApp.PresentationCore.ViewModels”中不存在。 ‘MvvmCross.WindowsUWP.Views.MvxWindowsPage`1 [TViewModel]’上的GenericArguments [0],’System.Object’违反了’TViewModel’类型的约束。 我认为错误有点模棱两可,因为在第一个错误中没有模板化版本,但第三个错误是关于模板约束违规。 我知道有一个选项将ViewModel和View绑定到命名约定或属性,但我想使用这种强类型解决方案。

MvvmCross UITextField自定义绑定

所以我试图在MvvmCross中为UITextField实现自定义绑定,几乎与软件键盘上的 Binding’GO ‘键一致 – 即尝试绑定文本字段以在点击完成按钮时自动触发事件键盘(因此绑定到ShouldReturn )。 我还需要绑定文本字段的EditingDidBegin和EditingDidEnd事件。 因为我绑定了多个事件,所以我创建了一个MvxPropertyInfoTargetBinding ,如下所示: public class MyTextFieldTargetBinding : MvxPropertyInfoTargetBinding { private ICommand _command; protected UITextField TextField { get { return (UITextField)Target; } } public MyTextFieldTargetBinding(object target, PropertyInfo targetPropertyInfo) : base(target, targetPropertyInfo) { TextField.ShouldReturn += HandleShouldReturn; TextField.EditingDidBegin += HandleEditingDidBegin; TextField.EditingDidEnd += HandleEditingDidEnd; } private bool HandleShouldReturn(UITextField textField) { if (_command == […]

ViewModel的构造函数在导航时再次被调用,因此信使订阅再次被订阅

我正在使用MvvmCross框架构建跨平台的移动应用程序。 由于我想在ViewModels之间共享信息,我使用内置的MvxMessenger在ViewModel的构造函数中注册通知。 让我们假设一条名为ShowAdsMsg的消息,然后ViewModel如下所示: public class AdsViewModel : BaseLookersViewModel, IAdsViewModel { private MvxSubscriptionToken _showAdsMsgToken; public AdsViewModel() { _showAdsMsgToken = MvxMessenger.Subscribe(message => onShowAdsNavigation(), MvxReference.Weak); MyMessenger.PublishLastMessage(); } private void onShowAdsNavigation() { //Do Stuff } } 关于MyMessenger事情: ViewModel的实际导航是从MainViewModel执行的。 由于在导航本身的那一刻, AdsViewModel还不存在,从MainViewModel发布的消息无法到达它。 所以,我的想法是天真地“记住”消息并在新的ViewModel准备就绪时发布它。 所以现在来自MainViewModel的导航调用看起来像这样: private void navigate() { MyMessenger.RememberMessage(new ShowAdsMsg(this)); ShowViewModel( ); } 我现在能够导航到ViewModel,并且成功捕获了所有通知。 然而… 当我按下设备上的BACK按钮并重新导航到同一个ViewModel时, 正在再次调用构造函数,因此重新发生消息订阅。 因此,当消息到达时, onShowAdsNavigation()处理程序被触发两次! 我找到了这篇类似的post,讨论了如何正确处理ViewModel的问题, 但它不包含我的问题的直接解决方案。 […]

ViewModel中的构造函数

是否可以在视图模型中使用构造函数,初始化数据服务? (不要误解我的意思,我的数据服务正在访问数据存储的Web服务)这样的事情(问我因为我得到ViewLoader引发的exception“无法加载ViewModel ……”而且它没有显示整个例外…): using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.ObjectModel; using Cirrious.MvvmCross.ViewModels; using Cirrious.MvvmCross.Commands; using MobSales.Logic.DataService; using MobSales.Logic.Base; using MobSales.Logic.Model; namespace MobSales.Logic.ViewModels { public class CustomersViewModel:MvxViewModel { ICustomerService custService; public CustomersViewModel(ICustomerService custService) { this.custService = custService; if (custService != null) { custService.LoadCustomerCompleted += new EventHandler(custService_LoadCustomerCompleted); } loadCustomerCommand = new MvxRelayCommand(LoadCustomer); loadCustomerCommand.Execute(); } […]

Fluent Bindings和UIButton标题

由于我的用户界面通常需要具有本地化字符串,因此我的视图模型提供了视图所使用的所有字符串。 这包括按钮上的标题等内容。 在iOS端,按钮标题通过SetTitle方法设置。 为了使视图模型string =>按钮标题映射起作用,MvvmCross做了一些神奇的绑定转换,以使其工作得很好。 假设我的视图中有一个名为Foo的UIButton,我想将其标题映射到View Model中的属性ButtonLabel。 知道以下工作以设置这样的绑定: this.AddBindings(new Dictionary() { {Foo, “Title ButtonTitle”} }); 可以使用MvvmCross中的Fluent Binding系统设置相同的绑定吗? 我一直在阅读MvvmCross源代码,但我还没有得到绑定代码。 以下内容不起作用(因为实际上按钮没有Title属性 – 它有一个SetTitle方法): var set = this.CreateBindingSet(); set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle); set.Apply(); 有没有其他方法可以使用Fluent Bindings获得所需的结果?

无法将Xamarin.Android和Xamarin.iOS添加到PCL

我正在尝试使用MvvmCross来训练一个示例项目 ,但我坚持在VS2012中添加框架的第一步。 当我尝试在PCL项目中添加Xamarin.Android和Xamarin.iOS框架时,它显示错误 在您选择的框架之间没有可移植的可用function 我尝试按照这个答案中的步骤,但它没有奏效。 有人能否解释这个问题。 谢谢。

“ResolveLibraryProjectImports”任务意外失败

我有一个Xamarin项目,它基于MvvmCross 。 该项目适用于iOS和Android。 我在Visual Studio 15中打开了这个项目。我遇到了一些错误,我很快就解决了。 有一些错误,即使在Google和Stackoverflow上搜索后也无法解决。 我已经尝试了在Stackoverflow上找到的每一个方法,但仍然存在所有剩余的错误。 这个项目正在使用像RestSharp和BoxApi.V2这样的第三方库(更多) 我在下面发布我的错误日志。 Severity Code Description Project File Line Suppression State Error The “ResolveLibraryProjectImports” task failed unexpectedly. System.IO.FileNotFoundException: Could not load assembly ‘RestSharp(Android), Version=0.0.0.0, Culture=neutral, PublicKeyToken=’. Perhaps it doesn’t exist in the Mono for Android profile? File name: ‘RestSharp(Android).dll’ at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(String fullName, ReaderParameters […]