-1

我有一个简单的问题,我相信有人可以帮助我。如何在方法中使用我的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 中运行一个查询,将查询结果放置在数据网格视图中。任何帮助将不胜感激。

4

3 回答 3

1

您已经为您的accountID. 您应该能够通过创建HistoryAuditLogViewModel类的实例来访问该变量。

我应该再次提到-您的问题的格式确实很差。当我对相关代码发表评论时,我并不是说你应该只发布整个课程。你需要找到代码的具体痛点。您已经提到您之前没有使用过 INavigation。如果您要将代码放入程序中,您需要了解它是什么以及它是如何工作的。

你试过什么??您是否遇到任何特定错误?我没有看到你自己在这里尝试过这个问题——我们很难理解你在这里想要完成什么,因此很难以任何程度的帮助来回答你的问题。

于 2013-03-04T15:20:12.520 回答
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; 
  } 
}
于 2013-03-04T15:23:05.553 回答
0

和 DNH 一样,真的不明白这个问题。

但也许您的问题更多是“如何访问我的视图模型实例?”

在这种情况下,您可以使用 MVVM 的消息传递模式,创建一个单例实例来存储整个应用程序的值或使用静态属性。

如果您的视图模型实例没有任何引用,则 IMO、消息传递或单例“存储库”是更合适的选择。

于 2013-03-04T15:15:36.453 回答