我有一个简单的问题,我相信有人可以帮助我。如何在accountID
方法中使用我的INavigationAware
变量,然后在另一个类中使用它们?
以下是我的代码:
ViewModel相关代码(HistoryAuditLogViewModel.cs):
#region Private Fields
private DatabaseConnectionSetting dbSetting;
private string tableName = "Manufacturers";
private int primaryKeyID = 1;
private string entryID;
private string manufacturerID;
private string manufacturerName;
private string auditDate;
private string sqlLogin;
private string application;
private List<string> dataList;
private string dbConnectionKey = Alliance.Infrastructure.Common.DatabaseConnectionSetting.BACKFLOW_SCOPE_KEY;
private int ShowAuditLogForPrimaryID { get; set; }
private int initialAuditID;
private int _accountID;
private string xmlString()
{
return "<row EntryID=\"" + entryID + "\" ManufacturerID=\"" + manufacturerID + "\" ManufacturerName=\"" + manufacturerName + "\" AuditDate=\"" + auditDate + "\" SqlLogin=\"" + sqlLogin + "\" Application=\"" + application + "\" />";
}
private DataSet _dataSet;
#endregion
#region Public Fields
public DataSet dataSet
{
get { return _dataSet; }
set { _dataSet = value; }
}
public int accountID
{
get { return _accountID; }
set { _accountID = value; }
}
#endregion
#region INavigationAware Members
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
string tableName;
string holdStringValue;
holdStringValue = navigationContext.Parameters["primarykey"];
if (holdStringValue == null ||
!Int32.TryParse(holdStringValue, out accountID))
{
accountID = 0;
}
if (accountID == this.ShowAuditLogForPrimaryID)
{
return true;
}
else
{
return false;
}
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
string holdStringValue;
int accountID;
initialAuditID = 0;
holdStringValue = navigationContext.Parameters["TableName"];
if (holdStringValue == null ||
!Int32.TryParse(holdStringValue, out initialAuditID))
{
initialAuditID = 0;
}
holdStringValue = navigationContext.Parameters["AccountID"];
if (holdStringValue != null &&
Int32.TryParse(holdStringValue, out accountID))
{
this.ShowAuditLogForPrimaryID = accountID;
}
else
{
this.ShowAuditLogForPrimaryID = 0;
}
Load_Audit();
}
#endregion INavigationAware Members
我将需要使用accountID
和在这些方法中设置的表名。至少我认为这是他们被设置的地方..我从来没有使用INavigation
所以我对它的工作原理有点困惑。
这是我需要能够使用ViewModel(CoreModuleDesktop)中的变量的地方:
this.NavManager.RegisterCommonActionItem("History Audit Log", "AuditLog", 110,
new BitmapImage(new Uri("pack://application:,,,/Core;component/Resources/maintenance.png")),
new Action(() =>
{
IRegionManager regionManager = AllianceApp.Container.GetExportedValue<IRegionManager>();
UriQuery query = new UriQuery();
query.Add("AccountID", accountID.ToString());
//query.Add("ServiceOrderID", tableName.ToString());
regionManager.RequestNavigate(RegionNames.MainRegion, new Uri(typeof(HistoryAuditLogView).FullName + query.ToString(), UriKind.Relative));
}));
}
基本上允许我这样做的是在ViewModel中运行查询,将查询结果放在数据网格视图中。任何帮助将不胜感激。
答案 0 :(得分:1)
您已经为accountID
定义了公开的getter和setter。您应该能够通过创建HistoryAuditLogViewModel
类的实例来访问变量。
我应该再次提到 - 你的问题格式很差。当我对相关代码发表评论时,我并不是说你应该发布整个课程。您需要找到代码的具体痛点。您已经提到过之前没有使用过INAVigation。如果您要将代码放入您的程序中,您需要了解它是什么以及它是如何工作的。
您尝试了什么?您是否遇到过任何特定错误?我没有看到你自己在这里尝试过这个问题 - 我们很难理解你在这里想要完成什么,因此很难以任何程度的帮助回答你的问题。
答案 1 :(得分:0)
与DNH相同,不会真正解决问题。
但也许您的问题更多是“如何获取对我的viewmodel实例的访问权限?”
在这种情况下,您可以使用MVVM的消息传递模式,创建一个单例实例,该实例将存储整个应用程序的值或使用静态属性。
如果您没有对viewmodel实例进行任何引用,那么IMO,消息传递或单例“存储库”是更合适的选择。
答案 2 :(得分:0)
O_o好的,我的回答被管理员删除了。我不知道为什么,但我想我现在正在解决你的问题。请看下面。
public interface ITest
{
void Test(string testInput);
}
public class TestImpl : ITest
{
public int TestId { get; private set; }
void ITest.Test(string testInput)
{
int intOut; //I think this is your point of confusion, right?
if (!int.TryParse(testInput, out intOut))
return;
TestId = intOut;
}
}