C# MvvmCross-MvxBind未正确绑定
在我的viewmodelA中,我有一个属性,当单击fragmentA.axml中的按钮时,我执行Mvxbind,屏幕发生变化,它显示viewmodelB,并且我发送了一个http请求,我得到了预期的响应。这正是我想要的工作方式。但问题是,我似乎可以在我的fragmentB.axml页面(someNumber和status)中显示该响应。有人能帮我解决这个问题吗。谢谢 ViewmodelA.cs:C# MvvmCross-MvxBind未正确绑定,c#,android,xamarin,mvvmcross,mvxbind,C#,Android,Xamarin,Mvvmcross,Mvxbind,在我的viewmodelA中,我有一个属性,当单击fragmentA.axml中的按钮时,我执行Mvxbind,屏幕发生变化,它显示viewmodelB,并且我发送了一个http请求,我得到了预期的响应。这正是我想要的工作方式。但问题是,我似乎可以在我的fragmentB.axml页面(someNumber和status)中显示该响应。有人能帮我解决这个问题吗。谢谢 ViewmodelA.cs: public MvxCommand SomeCommand { 得到 { 返回新的MvxComman
public MvxCommand SomeCommand
{
得到
{
返回新的MvxCommand(()=>something());
}
}
公共异步void something()
{
ShowViewModel();
SomeService serviceWrapper=新的SomeService();
var model={//somejson请求};
var结果=等待serviceWrapper.SubmitRequestAsync(模型);
SomeResponse=StaticMethods.DeserializeJson(结果);
Status=response.SomeResponse1.Activity[0].Status.Description;
SomeNumber=response.SomeResponse1.SomeNumber;
Debug.WriteLine(“SomeNumber:+SomeNumber”);
Debug.WriteLine(“状态:+状态”);
}
私有字符串_someNumber;
公共字符串数
{
得到
{
返回某个数字;
}
设置
{
SetProperty(参考编号、值);
RaisePropertyChanged(()=>SomeNumber);
}
}
私有字符串_状态;
公共字符串状态
{
得到
{
返回状态;
}
设置
{
SetProperty(参考状态、值);
RaisePropertyChanged(()=>状态);
}
}
片段a.axml
片段b.axml
据我所知,您有两种选择: 第一个选项是等待向您发送http调用,直到您进入ViewModelB,然后在那里加载数据
第二个选项是等待http调用完成后再导航,并将在ViewModelA中获取的数据作为ViewModelB的导航参数发送。MvvmCross不会对n个视图执行一个ViewModel。仅允许1:1关系 有各种各样的方法来解决你的问题 一,。 在ShowViewModel或新的NavigationService中传递一个对象,该对象描述来自ICommand的结果。要使其工作,您需要等待导航,直到您的请求完成:
var result = await GetSomeData();
ShowViewModel<ViewModelB>(new { status = Status, number = SomeNumber });
然后在该视图模型中设置状态和编号的道具
二,。
拥有在ViewModels之间共享的服务,并让它保持状态并处理您的rest呼叫:
public class MyService : IMyService
{
public string Status {get; set;}
public string Number {get; set;}
public async Task DoStuff()
{
}
}
那么在ViewModel中,一个ctor将是:
public ViewModelA(IMyService service)
在您的命令中:
public async void something()
{
await _service.DoSomething();
ShowViewModel<ViewModelB>();
}
这只是解决此问题的两种方法。您的类是否定义了:INotifyPropertyChanged?你没有提供课堂定义,我有点困惑。您似乎正在尝试导航到ViewModelB,但要在视图中显示的属性在ViewModelA中?@Ulbo我明白您的意思,但我想在单击按钮时发送http请求。但我的问题是,我不知道如何在另一个viewmodel的片段(即fragmentB)中显示该数据。如果你知道我如何解决这个问题,请告诉我。感谢第二个选项,如何在ViewModelA中发送数据。你能举个例子吗?斯图尔特就如何在视图模型之间传递参数给出了一个很好的答案。您应该在此处查看:请参阅有关传递参数的官方文档:
public void Init(string status, string number)
{
Status = status;
Number = number;
}
public class MyService : IMyService
{
public string Status {get; set;}
public string Number {get; set;}
public async Task DoStuff()
{
}
}
public ViewModelA(IMyService service)
public async void something()
{
await _service.DoSomething();
ShowViewModel<ViewModelB>();
}
public string Status => _service.Status;