我正在开发Xamarin Android应用程序。我使用private java.sql.`enter code here`Connection con = null;
private final String url = "jdbc:sqlserver://";
private final String serverName = "localhost\\PHILIP";
private final String portNumber = "1433";
private final String databaseName = "Payrol";
private final String userName = "sa";
private final String password = "kukaphilip";
public Main() {
System.setProperty("java.net.preferIPv6Addresses", "true");
getConnection();
}
private String getConnectionUrl() {
//System.out.println(java.lang.System.getProperty("java.library.path"));
return "jdbc:jtds:sqlserver://localhost;Database=Payrol;integratedSecurity=true";
}
private java.sql.Connection getConnection() {
try {
/*Class.forName("net.sourceforge.jtds.jdbc.Driver");*/
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(getConnectionUrl());
if (con != null) {
System.out.println("Connection Successful!");
String sql = "INSERT INTO payrol.dbo.test values('1','Philip')";
Statement st = con.createStatement();
st.executeUpdate(sql);
/*st.setInt(1, 1);
st.setString(2, "Philip");
st.execute();*/
}else{
System.out.println("Connection failed");
}
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
return con;
}
格式MvvmCross
。
现在,我想将数据从一个ViewModels
传递到另一个视图模型,但不想导航到ViewModel
。我没有导航到ViewModel
,而是导航到另一个ViewModel
。
例如:我有三个ViewModel
V1,V2和V3.Now我想将数据从V1传递到V2但是想要导航到V3。
这可能吗?
答案 0 :(得分:3)
请查看MvvmCross Messenger以执行此操作:https://github.com/MvvmCross/MvvmCross-Plugins/tree/master/Messenger
您需要在viewmodel上订阅某些内容:
public class LocationViewModel
: MvxViewModel
{
private readonly MvxSubscriptionToken _token;
public LocationViewModel(IMvxMessenger messenger)
{
_token = messenger.Subscribe<LocationMessage>(OnLocationMessage);
}
private void OnLocationMessage(LocationMessage locationMessage)
{
Lat = locationMessage.Lat;
Lng = locationMessage.Lng;
}
// remainder of ViewModel
}
答案 1 :(得分:0)
最简单的方法是使用MvvmCross中的This comment suggests。您可以在V2中订阅某种消息,然后在V1中发布该消息,然后单独导航到V3。
// subscribing to a certain message type
this.logoutToken = this.messenger.Subscribe<LogoutMessage>(this.HandleLogoutMessage);
// Creating and sending a message
var logoutMessage = new LogoutMessage(this, "You have been logged out.");
this.messenger.Publish(logoutMessage);
注意:将MessageToken
分配给成员变量很重要(就像在另一个答案中一样),否则它将被垃圾收集器清理。
答案 2 :(得分:0)
上述信使插件的替代方案我建议保存您需要在&#34;服务中共享的数据&#34;,作为MvvmCross管理的单件类服务:
CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsLazySingleton();
在视图模型中,只需将其添加到构造函数中即可使用该单例:
public WhateverViewModel(IService service)
该服务将是单例,因此您的数据将在应用程序实时循环中持续存在。
因此,在您的一个视图模型中,您可以这样做:
service.SharedData = new SharedData();
在另一个视图模型中:
this.data = service.SharedData